Programming

Leetcode-3. Longest Substring Without Repeating Characters

Leetcode-3. Longest Substring Without Repeating Characters

Given a string s, find the length of the longest substring without repeating characters.

Example 1:

Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.

Example 2:

Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.

<解題>

  1. 要找到不重複字詞的長度,類似sliding window,我們可以用兩個pointer去找,先移動b_pointer,如果沒有出現過的,先存在hashset中,每次指標++向後遍歷,同時更新最大的不重複字詞(max)
  2. 如果hashset重複了,那我們就把window整個向後移動,先把hashset中原先a_pointer的值移除,再把a_pointer往後移一位,以便之後繼續處理

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int a_pointer = 0;
        int b_pointer = 0;
        int max = 0;

        HashSet<Character> hash_set = new HashSet();

        while(b_pointer < s.length()){
            if(!hash_set.contains(s.charAt(b_pointer))){
                hash_set.add(s.charAt(b_pointer));
                b_pointer++;
                max = Math.max(max, hash_set.size());
            } else{
                hash_set.remove(s.charAt(a_pointer));
                a_pointer++;
            }
        }
        return max;
    }
}

Time: O(n) Space: O(n)