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.
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<>();
int start=0;
int pre=0;
int len=0;
int maxlen=0;
for(int i = 0;i < s.length();i++){
if(map.containsKey(s.charAt(i))){//判断是否存在当前字符
pre = map.get(s.charAt(i));//pre 为其哪一个出现字符的位置
for(int j = start;j<=pre;j++){
map.remove(s.charAt(j)); //如果出现该字符,将该字符前的字符全部移除
}
map.put(s.charAt(i),i);
len = i - pre; // 计算当前长度
start = pre+1; //新的长度
}
else{//没有重复
len ++;
map.put(s.charAt(i),i);
if(maxlen <len){
maxlen = len;
}
}
}
return maxlen;
}
}```
[思路讲解](https://blog.csdn.net/catttbao/article/details/69213737)