我的思路: 设置子串的上下标,实时记录上下标的相隔的大小,再求其最大值。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i,j,M=1,low; //low为下标,i为上标
low=0;
int flag;
i=1;
if(s.size() <= 1)
return s.size();
while(i<s.size())
{
flag = 0;
for(j=low; j<i; ++j) //找出重复的位置,则下标位置为重复位置加1
{
if(s[i] == s[j])
{
low=j+1;
flag=1;
break;
}
}
if(flag==0) //没有重复的则进行比较选择最大的
{
if(i-low+1>M)
M=i-low+1;
}
i++;
}
return M;
}
};
别人的思路:感觉差不多,稍微高效一些
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int l=1;//实时长度
int L=1;//最大长度
int j=0;
int x=0;//子串开头标记
if(s.size()<=1)
return s.size();
for(int i=1;i<=s.size()-1;i++)
for(j=x;j<i;j++){
if(!(s[i]==s[j])){
if(i==j+1){
l+=1;
L=(l>L)?l:L;
}
}
else{
l=l-(j-x);
x=j+1;
break;
}
}
return L;
}
};