基本思想:
一维数组链表直接想二分和滑动窗口;
但是注意简便写法,教程更多的是保证右边指针向右扩张,左指针依据条件进行收缩;
基本代码:
个人版本:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0;
int right=0;
int maxlength=0;
unordered_map<char,int>um;
while(right<s.size()){
if(um[s[right]]==0){
maxlength=max(maxlength,right-left+1);
um[s[right]]++;
}else{
while(s[left]!=s[right]){
um[s[left]]--;
left++;
}
um[s[left]]--;
left++;
um[s[right]]++;
}
right++;
}
return maxlength;
}
};
模版版本:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0;
int right=0;
int maxlength=0;
unordered_map<char,int>um;
while(right<s.size()){
char c=s[right++];
um[c]++;
while(um[c]!=1){
um[s[left]]--;
left++;
}
maxlength=max(maxlength,right-left);
}
return maxlength;
}
};