3.无重复字符的最长子串
3. 无重复字符的最长子串
难度:中等
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
**标签:**滑动窗口 Map
思路:
Java
class Solution {
public int lengthOfLongestSubstring(String s) {
//滑动窗口
if(s.length()==0)return 0;
//Map存储最长子串,key-字符,value-出现次数
Map<Character,Integer> map = new HashMap<Character,Integer>();
//滑窗起点
int left = 0;
int max = 0;
//如果没有就存进去,同时
for(int i = 0;i<s.length();i++){
//如果有,说明重复,就给left赋值,移动窗口起点
if(map.containsKey(s.charAt(i))){
left = Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
//把窗口大小存进去
max = Math.max(max,i-left+1);
}
return max;
}
}
复杂度:
时间复杂度:O(n)
空间复杂度:O(n)