利用滑动窗口,for(int right = 0; right < s.length(); right++)
这里是在不断的调整窗口的右边,根据HashMap
判断右边的元素是否出现过,不断调整左边的位置,计算最长长度,时间复杂度O(n)
,空间复杂度O(n)
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) return 0;
int max = 0;
int left = 0;
HashMap<Character,Integer> map = new HashMap<>();
// 更新右边距
for(int right = 0; right < s.length(); right++) {
if(map.containsKey(s.charAt(right))) {
// 更新左边距
left = Math.max(left,map.get(s.charAt(right)) + 1);
}
map.put(s.charAt(right),right);
max = Math.max(max,right - left + 1);
}
return max;
}
}
网友评论