【LeetCode】3. Longest Substring Without Repeating Characters(求最长的无重复子串)

  • Given a string, find the length of the longest substring without repeating characters.
  • 这是求最长的无重复子串
    Example 1:
Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3. 

Example 2:

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

Example 3:

Input: "pwwkew"
Output: 3
Explanation: 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.

java解法:
思路:输入一个字符串,求最长的无重复子串,就需要判断一个字符是否属于一个字符串,所以想到用java中的map,从左到右,字符串挨个设置顺序,作为value存入map,Example:“ab”,存入map为:<a,1>,<b,2>;一旦遇到map里面已经存在的,此时就可以计算两个相同值之间字符串的长度,并赋值给max保存,并继续把新的顺序放进去。

public class LongestSubString {
    public static int lengthOfLongestSubstring(String s) {
        int n = s.length(), ans = 0;
        Map<Character, Integer> map = new HashMap<>(); // current index of character
        // try to extend the range [i, j]
        for (int j = 0, i = 0; j < n; j++) {
            if (map.containsKey(s.charAt(j))) {
                i = Math.max(map.get(s.charAt(j)), i);
            }
            ans = Math.max(ans, j - i + 1);
            map.put(s.charAt(j), j + 1);
        }
        return ans;
    }

    public static void main(String[] args) {
//        System.out.println(lengthOfLongestSubstring("abcabcbb"));
//        System.out.println(lengthOfLongestSubstring("bbbbb"));
//        System.out.println(lengthOfLongestSubstring("pwwkew"));
        String s = "pwwkew";
        int n = s.length(), ans = 0;
        int[] index = new int[128]; // current index of character
        // try to extend the range [i, j]
        for (int j = 0, i = 0; j < n; j++) {
            i = Math.max(index[s.charAt(j)], i);
            ans = Math.max(ans, j - i + 1);
            index[s.charAt(j)] = j + 1;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37355731/article/details/82890779