3. 无重复字符的最长子串
程序员文章站
2022-07-14 14:39:28
...
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
解决思路:滑动窗口
用到的数据结构:HashMap 判断是否存在
key为字符 value为字符位置+1 (表示从后面一位不重复)
class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length();
int ans = 0;
Map<Character, Integer> map = new HashMap<>();
for(int end = 0,start = 0;end < n;end ++){
char a = s.charAt(end);
if(map.containsKey(a)){
start = Math.max(map.get(a),start); //这里比较大小是避免start左移
}
ans = Math.max(ans, end - start + 1);
map.put(s.charAt(end), end + 1);
}
return ans;
}
}
start = Math.max(map.get(a),start);
例子:…a…b…a…a…b… 举例应该是这样的例子吧,第二个a会把start更新到第一个a之后,第三个a会把start更新到第二个a之后,此时start=Idx(a2]+1,到第二个b会选择max[map(b),start]=start
上一篇: 算法图解——递归
下一篇: Hive(5) Hive的数据类型