LeetCode問題解(python)-3.重複文字なしの最上位列
6968 ワード
LeetCode問題解(python)
3.重複文字のない長男列
文字列を指定すると、重複文字が含まれていない長男の列の長さを見つけてください.
例1:
例2:
例3:
解決策1:ウィンドウを移動
問題を解く心得:
注意iとjはウィンドウの両側で、iは左側で、jはずっと右に増加して、iは変わらないか増加して、maxを使ってiが後退しないようにします.
解決策2:
問題を解く心得:
大神のコードを理解して、また自分で分析して書き直して、辞書を利用して探して、iは前から後まで遍歴して、jは最近繰り返した文字の位置をマークして、i-j+1は現在繰り返しない文字列の長さです.
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は現在繰り返しない文字列の長さです.