Leetcode03无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
想法
这种类型的题可以通过滑动窗口解决。
比较简便的方法是利用map,将字符和对应的下标保存为key-value对的方式,这样就可以通过下标去控制窗口显示,保证窗口内一直是没有重复元素的。这样只要遍历一边所有元素就可以获得结果。
代码
public class Solution {
public int lengthOfLongestSubstring(String s) {
//定义左右边界以及初始化返回
int left = 0, right = 0, res = 0;
int length = s.length();
//建立一个map
Map<Character,Integer> map = new HashMap<>();
//保证右边界小于字符串就
while (right<length){
//判断map中是否包含该字符
if (map.containsKey(s.charAt(right))){
//若包含每次区最右边的作为左边界
left = Math.max(left,map.get(s.charAt(right)));
}
//保证获得的子串长度取最大
res = Math.max(res,right-left+1);
map.put(s.charAt(right),right+1);
right++;
}
return res;
}
}