基本思想:
一维数组链表直接想二分和滑动窗口;
但是注意简便写法,教程更多的是保证右边指针向右扩张,左指针依据条件进行收缩;
基本代码:
个人版本:
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;
}
};
本文介绍了一种使用滑动窗口和哈希映射实现的高效算法,用于找出字符串中无重复字符的最长子串长度。通过左右指针控制窗口大小,结合哈希映射记录字符出现次数,动态调整窗口范围。
266

被折叠的 条评论
为什么被折叠?



