/*
* 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 滑动窗口方法
*/
class Solution {
public int lengthOfLongestSubstring(String s) {
int start, end, length = s.length();
int ans = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (start = 0, end = 0; end < length; end++) {
char a = s.charAt(end);// 取出end位的字符
if (map.containsKey(a)) {
// 如果存在就把start往后推(因为一出现重复的那么这个子串就不符合条件了,要重新开始统计)
start = Math.max(map.get(a), start);
}
ans = Math.max(end + 1 - start, ans);// 更新max值,使其永远都为不重复子串长度的最大值
map.put(a, end + 1);// 因为不重复的总是在重复的后面,所以end要加1
}
return ans;
}
}
"灵魂画师牧马"的思路好牛逼,给力奥!