1. 程式人生 > 其它 >無重複字元的最長子串 leetcode 3

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

技術標籤:LeetCode演算法leetcode字串佇列

題目

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

示例 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; } }