Problem 2154 YesOrNo
Accept: 129 Submit: 283
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
A国认为如果字符串a可以通过操作X变成字符串b,就认为是一样的字符串。
操作X:将字符串分为两部分,然后调换位置,操作次数不限。W=xy,W’=yx。
Input
有多组测试数据,处理到文件结尾。每组测试数据包含两个个字符串(包含英文字符和数字,长度为[1,500000])。
Output
对于每组测试数据,如果两个字符串是相同的,输出Yes或者是No。
Sample Input
YesOrNo
NoOrYes
YesOrNo
rNoYesO
Sample Output
No
Yes
思路:就是将第一个字符串旋转,看能不能得到第二个字符串
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string str1, str2;
while(cin >> str1 >> str2) {
int i, len = str1.size(), len2 = str2.size();
str1 += str1;
for(i=0; i < len; i++)
if(str1[i] == str2[0]) {
int t = 0;
while(str1[i + t] == str2[t]) t++;
if(t == len2) break;
}
if(i<len) printf("Yes\n");
else printf("No\n");
}
return 0;
}

本文探讨了一种独特的字符串比较方法,即通过旋转字符串来判断两个字符串是否相同。具体而言,该方法将第一个字符串重复自身,然后遍历每个字符,寻找与第二个字符串的第一个字符匹配的位置。一旦找到匹配的位置,它会继续比较后续的字符以验证是否完全相等。此过程用于解决字符串X通过操作Y变为字符串Z的问题,通过旋转操作来简化字符串比较的复杂性。
3396

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



