判断亲和串。亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。 输入 本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。 输出 如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。 样例输入 Copy AABCD CDAA ASD ASDF ab aba 样例输出 Copy yes no no
时间: 2024-02-13 14:03:57 浏览: 81
下面是一个C++程序,用于判断一个字符串s2是否为另一个字符串s1的亲和串:
```c++
#include<iostream>
#include<cstring>
using namespace std;
bool isAffinity(string s1, string s2) {
int len1 = s1.length();
int len2 = s2.length();
if (len1 != len2) { // 如果两个字符串长度不同,那么s2一定不可能是s1的亲和串
return false;
}
s1 += s1; // 将s1复制一遍拼接到末尾,形成新的字符串s3
if (s3.find(s2) != string::npos) { // 在s3中查找s2
return true; // 如果找到了,那么s2是s1的亲和串
} else {
return false; // 否则s2不是s1的亲和串
}
}
int main() {
string s1, s2;
while (cin >> s1 >> s2) {
if (isAffinity(s1, s2)) {
cout << "yes" << endl;
} else {
cout << "no" << endl;
}
}
return 0;
}
```
该程序使用了一个isAffinity()函数来判断字符串s2是否为s1的亲和串。函数首先比较两个字符串的长度,如果它们不相等,那么s2一定不可能是s1的亲和串,函数返回false;否则,将s1复制一遍拼接到末尾,形成新的字符串s3,然后在s3中查找s2,如果找到了,那么s2是s1的亲和串,函数返回true;否则,s2不是s1的亲和串,函数返回false。
在主函数中,程序使用while循环不断读入测试数据,并输出每组数据的判断结果。
阅读全文