目录:
题目:
分析:
这个做法简单的来说用两个指针就是从头开始暴力比较,答案劣的就往后跳,跳到失配位的下一个,直到其中一个跳出这个串结束。
注意: 当两个指针位置相同的时候,把其中一个++。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#define LL long long
#define seed 233
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
char s[120001];
int len;
int n=read();
int min(int i,int j)
{
return i<j? i:j;
}
int main()
{
while(n--)
{
scanf("%s",s);
len=strlen(s);
for(int i=0;i<len;i++) s[len+i]=s[i];
int i=0,j=1,k;
while(i<len&&j<len)
{
for(k=0;k<len&&s[i+k]==s[j+k];k++);
if(k>len) break;
if(s[i+k]>s[j+k])
i+=k+1;
else
j+=k+1;
j+=(j==i);
}
printf("%d\n",min(i,j)+1);
}
return 0;
}