無重複字元的最長子串 leetcode 3
阿新 • • 發佈:2020-12-12
題目
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: s = “abcabcbb”
輸出: 3
解釋: 因為無重複字元的最長子串是 “abc”,所以其長度為 3。
示例 2:
輸入: s = “bbbbb”
輸出: 1
解釋: 因為無重複字元的最長子串是 “b”,所以其長度為 1。
示例 3:
輸入: s = “pwwkew”
輸出: 3
解釋: 因為無重複字元的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。
示例 4:
輸入: s = “”
輸出: 0
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解題思路
1、若字串為空,則返回0; 若字串為一個空格的字元,注意返回1;
2、用佇列儲存,遍歷入隊的字元;
3、判斷入隊的字元是否在佇列中有相同的字元,若無,入隊並更新最長子串長度res,若有,更新res值並依次次出隊內含的相同字元及其之前的字元。
程式碼
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) return 0;
int res = 1;
Queue<Character> list = new LinkedList<>();
for (char c : s.toCharArray()){
if (list.contains(c)){
res = Math.max(re, list.size());
while(list.peek() != c){
list.remove();
}
list.remove();
list.add(c);
}else {
list.add(c);
res = Math.max(re, list.size());
}
}
return res;
}
}