题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
思路
维护一个滑动窗口,保证滑动窗口内的子串无重复字符。当一个新字符即将进入窗口时,需要判断该字符是否在窗口中出现过,这个时候就需要使用hashmap保存字符及字符最后出现的下标。
如果新字符在map里出现过,但不一定存在于窗口中,为了防止指针回退,写成
java
l=Math.max(l,map.get(c)+1);
代码
java
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<>();
int l=0,maxLen=0;
for(int r=0;r<s.length();r++){
char c=s.charAt(r);
if(map.containsKey(c)){
l=Math.max(l,map.get(c)+1);
}
map.put(c,r);
maxLen=Math.max(maxLen,r-l+1);
}
return maxLen;
}
}