第一遍暴力:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int maxlength=0;
int length=1;
for(int i=0;i<s.size();i++){
int k=i;
length=1;
while(k<s.size()-1&&s.substr(i,length).find(s[k+1])==-1){
length++;
k++;
}
maxlength=max(maxlength,length);
}
return maxlength;
}
};
然后用滑动窗口的思想优化了一下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int maxlength=0;
int l=0,k=0;
int length=1;
//int length=k-l+1;
if(s.size()==0)return maxlength;
if(s.size()==1)return 1;
while(k<s.size()-1){
while(l<=k&&s.substr(l,length).find(s[k+1])!=-1){
l++;
length--;
}
k++;
length++;
maxlength=max(length,maxlength);
}
return maxlength;
}
};
然后再用动态规划优化了一下,虽然感觉没啥意义
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int maxlength=0;
//int l=0,k=0;
int length=0;
map<char,int>hash;
for(int j = 0; j < s.size(); j++) {
int i;
if(hash.count(s[j])!=0)i=hash[s[j]];
else i=-1;
hash[s[j]]=j;// 更新哈希表
length = length < j - i ? length + 1 : j - i; // dp[j - 1] -> dp[j]
maxlength = max(maxlength, length); // max(dp[j - 1], dp[j])
}
return maxlength;
}
};
nnd,这些b的效率怎么这么高,玩毛!