無重複字串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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.給定字串,找到最長無重複字...