剑指 Offer 48. 最长不含重复字符的子字符串
程序员文章站
2022-03-22 12:43:34
...
import java.util.HashMap;
import java.util.Map;
class Solution {
public int lengthOfLongestSubstring(String s) {
int res = 0;
int len = 0;
int idx = 0;
// 某个字符 + 出现位置
Map<Character, Integer> map = new HashMap<>();
Map<Integer, Character> map1 = new HashMap<>();
for(int i=0; i<s.length(); i++){
if(!map.containsKey(s.charAt(i))){
map.put(s.charAt(i), i);
map1.put(i, s.charAt(i));
len += 1;
}else {
res = Math.max(len, res);
int index = map.get(s.charAt(i));
for(int j = idx; j <= index; j++){
map.remove(map1.get(j));
map1.remove(j);
}
idx = index+1;
len = i - index;
map.put(s.charAt(i), i);
map1.put(i, s.charAt(i));
}
}
res = Math.max(len, res);
return res;
}
public static void main(String[] args) {
Solution s = new Solution();
s.lengthOfLongestSubstring("pwwkew");
}
}
每次遇到重复的值的时候,去取现在取到的最大值就可以啦!
上一篇: Socket简单实现ssh笔记
下一篇: 替换字符串中连续出现的指定字符串
推荐阅读
-
Leetcode刷题记录——面试题48. 最长不含重复字符的子字符串
-
20200329-剑指offer-面试题48. 最长不含重复字符的子字符串(滑动窗口)
-
剑指 Offer 48. 最长不含重复字符的子字符串
-
剑指 Offer 48. 最长不含重复字符的子字符串
-
剑指Offer 48. 最长不含重复字符的子字符串(Medium)
-
Leetcode 剑指 Offer 48. 最长不含重复字符的子字符串
-
剑指 Offer 48. 最长不含重复字符的子字符串 -- DP解法
-
《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和
-
leetcode 3 最长不含重复字符的子字符串
-
(C++)剑指offer-54:字符流中第一个不重复的字符(字符串)