- 题目:
如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation)。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。
- 输入:两个字符串s、t
- 输出:若s、t互为回环变位,则输出是,否则输出否
c++
/*C++的string类提供了字符串中查找另一个字符串的函数find。
*其重载形式为:string::size_type string::find(string &);
*功能为在string对象中,查找参数string类型的字符串是否存在,如果存在,返回起始位置。不存在则返回 string::npos。
*
*求子串substr(index, l),index表示起始位置,l表示子串长度
*
*/
#include<iostream>
#include<string>
using namespace std;
bool isCircularRotation(string s, string t);
bool isCircularRotation1(string s, string t);
int main() {
string s, t;
cout << "请输入字符串s和t:\t";
cin >> s >> t;
cout << "s和t是否互为回环:\t";
if (isCircularRotation1(s, t))
cout << "是" << endl;
else
cout << "否" << endl;
return 0;
}
//从s的首位置开始,依次逐个将字符循环左移(即分为左右两字串,然后将左子串接在右字串子串后面),将拼接后的字串与t作比较
//主动构造s的回环字串
bool isCircularRotation(string s, string t) {
for (int i = 0; i <= s.length(); i++) {
string sLeft = s.substr(0, i); //s的左子串
string sRight = s.substr(i, s.length() - i); //s的右子串
if ((sRight + sLeft) == t)
return 1;
}
return 0;
}
//若s和t是回环字串,则由两个s拼接的字符串必然包含t
bool isCircularRotation1(string s, string t) {
return ((s.length() == t.length()) && ((s + s).find(t) != string::npos));
}
java
思路来源:https://www.cnblogs.com/kkkky/p/7832199.html