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

2021-10-04 20:59:05 字數 1408 閱讀 9295

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

示例 1:

輸入:"abcabcbb"輸出:3解釋:因為無重複字元的最長子串是"abc",所以其長度為 3。
示例 2:

輸入:"bbbbb"輸出:1解釋:因為無重複字元的最長子串是"b",所以其長度為 1。
示例 3:

輸入:"pwwkew"輸出:3解釋:因為無重複字元的最長子串是"wke",所以其長度為 3。

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

解法一:時間複雜度很高, 需要兩層for迴圈加字元判斷

class solution }}

return resultlength;

}public boolean judgeresult(string s, int begin, int end)else

}return true;

}}

解法二:動態規劃

維護乙個陣列dp,dp[i]表示到以第i個字元結尾的不包含重複陣列的子字串的最大長度。

(我們並不儲存最大不重複子字串,只是儲存其長度方便後續比較)

狀態轉移:

1. 第i個字元從未出現過,則dp[i] = dp[i-1] + 1;

2. 第i個字元出現過, 這時我們找出第i個字元最近一次出現的位置index,記兩個的距離為d= i-index:

1) d<=dp[i-1],即這個字元出現在以第i-1個字元結尾的不包含重複陣列的子字串中,則dp[i] = d;

2) d>dp[i-1], 即這個字元沒有出現在以第i-1個字元結尾的不包含重複陣列的子字串中,則dp[i] = dp[i-1] + 1 。

class solution 

int dp = new int[n];

dp[0] = 1;

int res = 1;

for (int i = 1; i < n; i++) else

} else

res = math.max(res, dp[i]);

}return res;

}}

leetcode無重複字串

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

leetcode3 無重複字元最長字串

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