问题:返回字符串中最长的的没有重复字符的子串的长度
C++:
暴力找每个字符开头的满足条件的子串的长度,O(n^2)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
bool vis[256];
memset(vis,0,sizeof(vis));
int len = s.length();
int ans=0, res=0;
for(int i = 0; i < len; i++){
for(int j = i; j < len; j++){
if(vis[s[j]]){
ans = max(ans,res);
res=0;
memset(vis,0,sizeof(vis));
break;
}
else{
vis[s[j]] = true;
res++;
}
}
}
ans = max(ans,res);
return ans;
}
};
用队列瞎搞,维护一个子串,O(2n)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
queue<int> qi;
bool vis[256];
memset(vis,0,sizeof(vis));
int len = s.length();
int ans = 0, res = 0;
for(int i = 0; i < len; i++){
if(!vis[s[i]]){
qi.push((int)s[i]);
vis[s[i]] = true; res++;
}
else{
ans = max(ans,res);
while(true){
int temp = qi.front(); qi.pop();
vis[temp] = false; res--;
if(temp == s[i]){
qi.push(temp);
vis[temp] =true; res++;
break;
}
}
}
}
ans = max(ans, res);
return ans;
}
};