题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
解题思路: 滑动窗口/双指针(计算长度) + hashMap(判重)
代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
int start = 0, max = 0;
// 记录字符的下标
HashMap<Character, Integer> map = new HashMap<>();
//遍历
for(int end = 0; end < s.length(); end++){
// 获取end指针的字符
char ch = s.charAt(end);
// 判断ch字符是否在map中
if(map.containsKey(ch)){
// 如果重复,则start指针跳跃到不重复的下一个位置
start = Math.max(map.get(ch) + 1, start);
}
// 计算当前不重复子串的最大长度
max = Math.max(max, end-start+1);
// 将end指针处的字符添加到map中
map.put(ch, end);
}
return max;
}
}