3 無重複字元的最長子串

2021-10-07 11:20:47 字數 1079 閱讀 4964

方法一:動態規劃

d[i] = (s[i]是否與d[i-1]中的字元重複?找到重複的位置,d[i]等於兩者相減:d[i-1]+1)

問題一:如何判斷是否重複?

使用map或set

問題二:如何找到重複的位置?

使用map,其key = 字元,其value=位置。

問題三:需要每個d[i]都配乙個map嗎?

並不需要,一次遍歷,判斷d[i-1]的長度時候落在了當前重複字的區間內.

,如果出現新的重複,將其更新即可。

時間複雜度為o(n),空間複雜度為o(n)

方法二:雙指標

使用兩根起始位置在字串頭的指標i,p2。i先移動,當遇到重複的字母時,開始記錄len1 = i-重複處的位置,len2=i-p,用max和len2比較,如果len1>=len2,就另p移動到重複處+1的地方,否則不改變p1的位置。

注意,最後要比較一下最後乙個不重複的字串和當前max的值。

雙指標也比較適和求連續的字串這種問題,但是雙指標的初始位置和移動路徑應該如何安排,這個一定要想清楚。
第一種方法:

class

solution

mapmap =

newhashmap

<

>()

;for

(int i =

1;i)else

}else

map.

put(cur,i-1)

;}int maxlen =0;

for(

int i =

0;i)return maxlen;

}}

第二種方法:

class

solution

} map.

put(cur,i);}

max = math.

max(s.

length()

-p1,max)

;return max;

}}

3 無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而不是子串。思路 用 i...

3 無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 無重複字元的最長子串是 abc 其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 無重複字元的最長子串是 b 其長度為 1。示例 3 輸入 pwwkew 輸出 3 解釋 無重複字元的最長子串是...

3 無重複字元的最長子串

給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為...