//思路:字母的ASCII码值作为数组的下标,table[]初始值为-1, end遍历,start记录位置。
网上搜的图片,思路灰常清晰
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string s;
int table[256];
memset(table,-1,sizeof(table));
cin>>s;
int start=0,end=1,len,ans=1;//end指针遍历
len=s.length();
table[s[start]]=0;
while(end<len)
{
if(table[s[end]]>=start)//已经出现重复
{
start=table[s[end]]+1; //start 从上次出现的位置下个开始;
}
ans=ans>(end-start+1)?ans:(end-start+1);
table[s[end]]=end;
end++;
}
cout<<ans<<endl;
return 250;
}
ps:已经有2年没有刷题,这个题好熟悉,但是一开始没有思路,养成清晰思路的草稿图,对分析真的很有帮助