【校内测 10.6】【签到题】【字符串】日常
题目
解题思路
数据范围是3*105一遍搞过去就ok了
【奇迹】不停往后取值
当遇到有相同的字符时,跳到它上一次出现的位置的下一个位,作为新的【奇迹】的起点
取【奇迹】中长度最长的即为答案
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,sum,ans,vis[30];
string s;
int main()
{
scanf("%d",&n);
cin>>s;
int i=0;
while (i<n)
{
if (i!=0) i=vis[s[i]-97]; //跳到上一个的后一位
sum=0;
for (int j=0;j<26;j++) vis[j]=0; //标记
while (!vis[s[i]-97]&&i<n)
{
vis[s[i]-97]=i+1;
sum++,i++;
}
ans=max(ans,sum); //取答案
}
printf("%d",ans);
return 0;
}