题意介绍
解题思路
- 本题难点在于返回最长子串长度,首先通过将以遍历的字符存放到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;
}