寻找最长不重复字串
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequenceand not a substring.
---
解题思路大致如下:
链接:https://www.nowcoder.com/questionTerminal/5947ddcc17cb4f09909efa7342780048
"滑动窗口"
比方说 abcabccc 当你右边扫描到abca的时候你得把第一个a删掉得到bca,
然后"窗口"继续向右滑动,每当加到一个新char的时候,左边检查有无重复的char,
然后如果没有重复的就正常添加,
有重复的话就左边扔掉一部分(从最左到重复char这段扔掉),在这个过程中记录最大窗口长度
public int lengthOfLongestSubstring(String s) {
if(s.length()==0){return 0;}
int max = 0,newSite=0;
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
for(int i = 0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
newSite = Math.max(newSite,map.get(s.charAt(i))+1);;
}
map.put(s.charAt(i), i);
max = Math.max(max, i-newSite+1);
}
return max;
}