leetcode 3. Longest Substring Without Repeating Characters 無重複字元的最長子串
阿新 • • 發佈:2022-05-15
一、題目大意
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
給定一個字串 s ,請你找出其中不含有重複字元的 **最長子串 **的長度。
示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: s = "pwwkew"
輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
提示:
- 0 <= s.length <= 5 * 104
- s 由英文字母、數字、符號和空格組成
二、解題思路
滑動視窗的思路解決
三、解題方法
3.1 Java實現
public class Solution { public int lengthOfLongestSubstring(String s) { int[] chars = new int[128]; int left = 0; int maxSize = 0; // 視窗右邊界向右滑 for (int right = 0; right < s.length(); right++) { chars[s.charAt(right)]++; if (chars[s.charAt(right)] == 1) { maxSize = Math.max(right - left + 1, maxSize); } else { // 視窗左邊界向右滑 while(chars[s.charAt(right)] != 1) { chars[s.charAt(left)]--; left++; } } } return maxSize; } }
四、總結小記
- 2022/5/15 滑動視窗,重點是:視窗在滑動的過程中記錄什麼值最終要求什麼值,以及視窗左邊界向右滑的結束條件是什麼