问题描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
解题思路:
此题可以利用滑动窗口从左至右滑动来解决。
利用hashmap来存储字符,以及最新字符出现的位置,
用num来记录最长子串
start用来记录当前滑动窗口的起始位置
end用来遍历字符串
java代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character,Integer> map=new HashMap<>();
int n=s.length();
if(n==0) //如果字符串为空则直接返回0
return 0;
int start=0; //start用来记录当前滑动窗口的起始位置
int end=0; //end用来遍历字符串,也是当前滑动窗口结束位置
int num=0; //用num来记录最长子串
for(start=0,end=0;end<n;end++){
if(map.containsKey(s.charAt(end))){ //如果该字符已经存在,
int k=map.get(s.charAt(end)); //则获取字符出现的位置
if(k>=start) //如果出现的位置在当前滑动窗口中,
start=k+1; //则把滑动窗口起始位置设为字符出现位置+1
}
num=Math.max(num,end-start+1); //num选取当前滑动窗口的大小和num中较大的,
map.put(s.charAt(end),end); //更新end所在的字符的位置
}
return num;
}
}