给定一个字符串 s
,请你找出其中不含有重复字符的 最长
子串
的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路:求不重复最长子串,采用双指针+哈希表实现
先从头遍历每个字符 设指针k=-1 当头指针为i=0 也就是第一个字符 此时子串为1(i-k)
如果每个字符不同就放到哈希表中,字符相同就更新指针k,指向最近一次相同字符所出现的位置
java
HashMap<Character, Integer> map = new HashMap<>();
int k =-1;
int res=0;
for (int i = 0; i <s.length(); i++) {
if(!map.containsKey(s.charAt(i)))
map.put(s.charAt(i),i);
else
{ map.put(s.charAt(i), i);//需要更新最新出现字符的哈希表
k = Math.max(k, map.get(s.charAt(i)));
}
res = Math.max(res,i-k);
}
return res;
}