//思路:字母的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年没有刷题,这个题好熟悉,但是一开始没有思路,养成清晰思路的草稿图,对分析真的很有帮助
最长无重复字符子串算法
本文介绍了一种寻找字符串中最长无重复字符子串的高效算法实现。通过使用ASCII码值作为数组下标,记录每个字符最后出现的位置,算法能够在线性时间内找到最长的无重复字符子串长度。
444

被折叠的 条评论
为什么被折叠?



