题目链接:https://ac.nowcoder.com/acm/contest/328/A
一种方法是字符串最小表示法,直接求出ans是否等于0就好了,还有就是用string去模拟这个过程,过题姿势很多,string还是最简单方便的,其他的思路就是去一个一个枚举判断分情况讨论。
AC代码(字符串最小表示法):
#include <bits/stdc++.h>
using namespace std;
int main()
{
int len;
string str;
scanf("%d",&len);
cin>>str;
bool flag = false;
int i = 0, j = 1, k;
while(i < len && j < len){
k = 0;
while(k < len && str[(i + k) % len] == str[(j + k) % len]) k ++;
if(k == len) break;
if(str[i + k] > str[j + k]){
i += k + 1;
if(i == j) i ++;
}
else{
j += k + 1;
if(i == j) j ++;
}
}
int ans = min(i, j);
if(ans != 0)flag = true;
if(flag) puts("YES");
else puts("NO");
return 0;
}
AC代码(string):
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
string str, s;
scanf("%d",&n);
cin>>str;
s = str;
bool flag = false;
for(int i=0;i<n;i++){
s += s[0];
s.erase(0, 1);
if(s < str){
flag = true;
break;
}
}
if(flag) puts("YES");
else puts("NO");
return 0;
}