这个题目刚开始想用动态规划来解决,但是水平不够,写不出来。用暴力求解的话,时间复杂度为O(n^3),肯定会超时,因此我想到了STL中的集合用来判断某个字符是否重复出现,这样的话时间复杂度大概可以达到O(n^2*logn),结果显示确实时间代价大,大概450ms,差一点就gg了。代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> ch_set;
int maxlength=0;
for(int i=0;i<s.size()-maxlength;i++)
{
ch_set.clear();
ch_set.insert(s[i]);
for(int j=i+1;j<s.size();j++)
{
if(ch_set.count(s[j])==0)
{
ch_set.insert(s[j]);
}
else
{
break;
}
}
if(maxlength<ch_set.size())
maxlength=ch_set.size();
}
return maxlength;
}
};