LeetCode問題解(python)-3.重複文字なしの最上位列


LeetCode問題解(python)
3.重複文字のない長男列
文字列を指定すると、重複文字が含まれていない長男の列の長さを見つけてください.
例1:
  : "abcabcbb"
  : 3 
  :               "abc"3

例2:
  : "bbbbb"
  : 1
  :               "b"1

例3:
  : "pwwkew"
  : 3
  :               "wke"3。
        ,              ,"pwke"       ,    。

解決策1:ウィンドウを移動
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        ls ={}
        max_ls = 0;
        i = 0;
        j = 0;
        count = 1
        for sst in s:
            if sst in ls:
                i = max(i,ls[sst])
                j = j+1
            else:
                j = j+1;
                i = i;
            max_ls = max(max_ls,j-i)
            ls[sst] = count
            count = count+1
        return max_ls

問題を解く心得:
注意iとjはウィンドウの両側で、iは左側で、jはずっと右に増加して、iは変わらないか増加して、maxを使ってiが後退しないようにします.
解決策2:
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        ls ={}
        max_ls = 0;
        j = 0;
        for i in range(len(s)):
            if s[i] in ls:
                j = max(ls[s[i]],j)
            max_ls = max(max_ls,i-j+1)
            ls[s[i]] = i+1
        return max_ls

問題を解く心得:
大神のコードを理解して、また自分で分析して書き直して、辞書を利用して探して、iは前から後まで遍歴して、jは最近繰り返した文字の位置をマークして、i-j+1は現在繰り返しない文字列の長さです.