【LeetCode】3. 無重複字符的最長子串

題目描述

題目原鏈接:無重複字符的最長子串
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 

解釋: 因爲無重複字符的最長子串是 “abc”,所以其長度爲 3。
示例 2:

輸入: "bbbbb"
輸出: 1

解釋: 因爲無重複字符的最長子串是 “b”,所以其長度爲 1。
示例 3:

輸入: "pwwkew"
輸出: 3

解釋: 因爲無重複字符的最長子串是 “wke”,所以其長度爲 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。

解答思路

這裏我們使用HashSet進行一次遍歷,實現以滑動窗口的機制去計算最長子串。
具體做法就是維護兩個指針 i, j
在遍歷字符串s的過程中,讓 j 往前移動。
如果遇到HashSet不包含s.charAt(j)時,則計算當前最大的字串長度,並把 s.charAt(j) 加入到HashSet中,j++
如果遇到HashSet不包含 s.charAt(j) 時,則將HashSet中的 s.charAt(i) 去除,然後進行i++,重複以上過程。

代碼

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int i = 0;
        int j = 0;
        int ans = 0;
        HashSet<Character> set = new HashSet<>();
        while (i <= j && j < s.length()) {
            if (!set.contains(s.charAt(j))) {
                set.add(s.charAt(j));
                j++;
                ans = Math.max(ans, j - i);
            } else {
                set.remove(s.charAt(i));
                i++;
            }
        }
        return ans;
    }
}
發佈了34 篇原創文章 · 獲贊 3 · 訪問量 3851
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章