剑指 Offer 48. 最长不含重复字符的子字符串
题目链接:https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
个人题解记录
1.思路
这题算是第二次做,思路是每添加一个数,判断这个数是否出现过,如果出现过则更新left,left代表以当前字符为子字符串的末尾,字符串最左的字符索引
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<>();
int max = Integer.MIN_VALUE;
int left = 0;
for (int i = 0;i<s.length();i++){
if (!map.containsKey(s.charAt(i))) {
map.put(s.charAt(i),i);
max = Math.max(i-left+1,max);
}else {
left = Math.max(map.get(s.charAt(i))+1,left);
map.put(s.charAt(i),i);
max = Math.max(i-left+1,max);
}
}
return max == Integer.MIN_VALUE?0:max;
}
}
代码整理一下
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<>();
int max = Integer.MIN_VALUE;
int left = 0;
for (int i = 0;i<s.length();i++){
if (map.containsKey(s.charAt(i)))
left = Math.max(map.get(s.charAt(i))+1,left);
map.put(s.charAt(i),i);
max = Math.max(i-left+1,max);
}
return max == Integer.MIN_VALUE?0:max;
}
}