输入
Abcabcbb
Bb
输出
4
2
#include<cstring>
#include<iostream>
#include<algorithm>
int h[256];
using namespace std;
int main()
{
char s[1000];
int i=0,j=0,maxlen=0;
cin>>s;
int l=strlen(s);
while(j<l)
{
if(h[s[j]]==0)
{
h[s[j]]=1;
j++;
}
else
{
maxlen=max(maxlen,j-i);
while(s[i]!=s[j])
{
h[s[i]]=0;
i++;
}
i++;
j++;
}
}
maxlen=max(maxlen,j-i);//防止一直执行if语句导致maxlen=0
cout<<maxlen<<endl;
}
如
Abcabcbb
i记录初始位置,j记录终点位置。
当遍历到第二个b时j=4 i=0 此时maxlen=4
之后i到2 j到5 j-i=3 不更新