leetcode無重複字串

2021-10-08 19:03:50 字數 1699 閱讀 6729

無重複字串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: 「abcabcbb」

輸出: 3

解釋: 因為無重複字元的最長子串是 「abc」,所以其長度為 3。

示例 2:

輸入: 「bbbbb」

輸出: 1

解釋: 因為無重複字元的最長子串是 「b」,所以其長度為 1。

示例 3:

輸入: 「pwwkew」

輸出: 3

解釋: 因為無重複字元的最長子串是 「wke」,所以其長度為 3。

請注意,你的答案必須是 子串 的長度,「pwke」 是乙個子串行,不是子串。

題目評價:這道題和最長的回文字串看似類似但有很大差別。

思路1:

最開始想到的是動態規劃,str[i—n]的無重複判定和str[i—(n-1)]+str[n]相同,即str[n]是否在str[i—(n-1)]中。以此完成**。

public

intlengthoflongestsubstring

(string s)

int max=1;

boolean

rec=

newboolean

[length]

[length]

;for

(int i=length-

1;i>=

0;i--

)for

(int i=

0;i<=length-

1;i++

)else

}else}}

return max;

}static

boolean

check

(string s,

int a,

int b)

return

true

;}

**分析:這個演算法相當笨拙,雖然是動態規劃,但是並沒有太多實際上的時間減少,是乙個o(n^2)的時間和空間複雜度。

結果如下:

正確思路:

從str[i]到str[n]開始,記錄這個範圍中的字串,如果沒有重複就讓n++,如果有重複就讓i++。記錄這個過程中的最大距離。

public

intlengthoflongestsubstring

(string s)

int max=0;

int n=1;

int lon=0;

int temp=0;

occ.

add(s.

charat(0

));for

(int i=

0;i<=length-max-1;

)if(n-i>max)max=n-i;

while

(icontains

(s.charat

(n)))}

return max;

}

**評析:參考了leetcode標準答案的思路,迴圈的巢狀過多,導致最差情過於不是很理想。例如「abcdrfghigklmm」當最後乙個字元和倒數第二個字元重複的時候,str[i]需要從0一直增長到m才能進行後面的。所以需要對字串檢索兩遍。

leetcode3 無重複字元最長字串

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

leetcode 字串 無重複字元的最長子串

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

leetcode 3 最長無重複字串

3.longest substring without repeating characters 題面 given a string,find the length of the longest substring without repeating characters.給定字串,找到最長無重複字...