Longest Substring Without Repeating Characters Leetcode

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.

 

以后遇到string要首先想到hashmap啦,two pointers啦什么的。
public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int start = 0;
        int end = 0;
        int max = 0;
        Map<Character, Integer> hs = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if (!hs.containsKey(s.charAt(i)) || (hs.containsKey(s.charAt(i)) && hs.get(s.charAt(i)) < start)) {
                hs.put(s.charAt(i), i);
                end++;
            } else {
                max = Math.max(max, end - start);
                start = hs.get(s.charAt(i)) + 1;
                hs.put(s.charAt(i), i);
                end++;
            }
        }
        max = Math.max(max, end - start);
        return max;
    }
}

这次做的还可以,自己测了test case后一遍就过了。吼吼吼,当然代码还是有冗余,又改良了一下

public class Solution {
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int start = 0;
        int end = 0;
        int max = 0;
        Map<Character, Integer> hs = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if (hs.containsKey(s.charAt(i)) && hs.get(s.charAt(i)) >= start) {
                max = Math.max(max, end - start);
                start = hs.get(s.charAt(i)) + 1;
            }
            hs.put(s.charAt(i), i);
            end++;
        }
        max = Math.max(max, end - start);
        return max;
    }
}

 

posted @ 2017-01-26 00:21  璨璨要好好学习  阅读(135)  评论(0编辑  收藏  举报