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.
注意这里头脑要清晰,在每一个不同的条件下有什么操作,操作的顺序等等,可以考虑把case分析清楚了,写个伪代码,再写code。
public int lengthOfLongestSubstring(String s) {
if (s.length() <= 1) return s.length();
int res = Integer.MIN_VALUE;
HashSet<Character> set = new HashSet<>();
int start = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (set.contains(c)) {
//move start
res = Math.max(res, i - start);
while (start < i) {
if (s.charAt(start) == c) {
start++;
break;
} else {
set.remove(s.charAt(start));
}
start++;
}
} else {
set.add(c);
}
}
res = Math.max(res, s.length() - 1 - start + 1);
return res;
}