3. Longest Substring Without Repeating Characters

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

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

Solution:
基本想法:维护一个hashmap,其中字符为key,位置为value,同时维护两个指针用于计算最长子串。右指针扫描,同时更新hashmap。如果某个字符已经在hashmap里面,将左指针移动到上一次发现该字符的右一位。注意两个指针可以同时移动。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s.length() == 0)    return 0;
        Map map = new HashMap<>();
        int max = 0;
        for (int i = 0, j = 0; i < s.length(); ++i){
            if (map.containsKey(s.charAt(i))){
                j = Math.max(j, map.get(s.charAt(i))+1);
            }
            map.put(s.charAt(i), i);
            max = Math.max(max, i-j+1);
        }
        return max;
    }
}

你可能感兴趣的:(3. Longest Substring Without Repeating Characters)