[LeetCode] 3. 无重复字符的最长子串(java实现)双指针+哈希表
1. 题目
2. 读题(需要重点注意的东西)
思路:
用两个指针i和j来维护一段区间,将这段区间内字符出现的次数加到哈希表中,当这段字符串中出现了大于1的字符,那么移动指针j,每移动一次,将哈希表中对应的字符减1,直到哈希表中不存在大于1的字符为止。i继续向后遍历。然后取合法区间的最大值即可。
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character,Integer> hashmap = new HashMap<>();
int res = 0;
int j = 0;
for(int i = 0; i < s.length();i++){
// getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
hashmap.put(s.charAt(i),hashmap.getOrDefault(s.charAt(i),0) + 1);
while(hashmap.get(s.charAt(i))>1){
hashmap.put(s.charAt(j),hashmap.get(s.charAt(j))-1);
j++;
}
res = Math.max(res,i-j+1);
}
return res;
}
}