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; } }