题意介绍

解题思路
- 本题难点在于返回最长子串长度,首先通过将以遍历的字符存放到Map<String,Integer>中,key为字符,value为该字符的数组下标。若map中已包含该字符,则更新start。
- 通过Math.max获取字符串最长得start,end得长度
本题代码
public int lengthOfLongestSubstring(String s) {
//hash表判断字符是否重复,若重复则重新竞选新的start.
Map<Character, Integer> map = new HashMap<>();
//字符串长度
int length = s.length();
//不重复字串开始值
int start = 0;
//目标返回值
int ans = 0;
for (int end = 0; end < length; end++) {
char c = s.charAt(end);
if (map.containsKey(c)) {
//当出现重复字符,则更新start
start = Math.max(start, map.get(c));
}
//返回最大得长度
ans = Math.max(ans, end - start + 1);
map.put(c, end + 1);
}
System.out.println(ans);
return ans;
}
本文详细介绍了如何求解最长无重复字符子串的问题,采用哈希表记录字符位置,通过滑动窗口的方式更新起始位置,最终得出最长子串的长度。
1287

被折叠的 条评论
为什么被折叠?



