题干
解法:EZ
class Solution {
public:
int lengthOfLongestSubstring(std::string s) {
if(s.size() == 0) return 0;
int res = 1;
int i = 0 , len = 1, mark = 0;
std::string pos,pre;
std::unordered_map<std::string, int> hash;
while(i+len < s.size()){
pos = s.substr(i,len);
pre = s.substr(i+len,1);
std::string in = pos.substr(len-1,1);
hash[in] = len-1;
auto it = hash.find(pre);
if(it != hash.end()){
i += hash[pre] + 1;
len = 1;
pos = s.substr(i,1);
hash.clear();
continue;
}
len++;
if(len > res) res = len;
}
return res;
}
};
hash表 省时间的神!
一开始做错了 理解错题意 做成字串内不重复了
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int res = 0;
int i = 0 , j = 1;
std::string pos = s.substr(i,1);
std::string pre = s.substr(i+j,j);
while(i+j <= s.size()){
if(pos != pre){
j++;
pos = s.substr(i,j);
if(i+j+j < s.size()){
pre = s.substr(i+j,j);
}
else{
if(s.size()-i > res) res = s.size()-i;
break;
}
if(j-1 > res) res = j-1;
continue;
}
else{
i += j;
j = 1;
pos = s.substr(i,j);
pre = s.substr(i+j,j);
continue;
}
}
return res;
}
};