题目
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
分析
用HashMap存储字母出现的最新长度(即从开始到当前字母的长度),k表示从字符串开始到含重复字母的长度,result
记录最长长度
代码
class Solution {
public int lengthOfLongestSubstring(String s) {
int result = 0;
HashMap<Character,Integer> map = new HashMap<>();
for (int i = 0, k = 0; i < s.length(); i++) {
char temp = s.charAt(i);
if (map.containsKey(temp)){
k = Math.max(k,map.get(temp));
}
result = Math.max(result,i+1-k);
map.put(temp,i+1);
}
return result;
}
}
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。