题目: ????????如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A = "12345", A的旋转词有"12345", "23451", "34512", "45123"和"51234"。对于两个字符串A和B,实现方法判断A和B是否互为旋转词。
力扣题目链接
思路: ? ? ? ? 相关函数:
// substr()函数
// 内部定义
basic_string substr(
const size_type _Off = 0,
const size_type _Count = npos) const;
// compare()函数
// 内部定义
int compare(const basic_string& _Right) const noexcept;
????????1. 当A、B长度不同时,直接返回false ????????2. 当A、B相同时(包括两者为空的情况),直接返回true ????????3. 当A、B不满足上面两种情况时,进入以下步骤: ????????????????3.1.定义变量存储A或B字符串长度 ????????????????3.2.while循环体中,构造A或B字符串的旋转词,并逐一比较,若相同则返回true ????????????????????????A = A.substr(1) + A[0];//从字符串第二位开始截取到末尾,然后补上第一位
函数代码:
bool determineString(string A, string B) {
if (A.length() != B.length() || !A.compare(B))return !A.compare(B);
int strALen = A.length();
while (strALen-- > 0) {
A = A.substr(1) + A[0];//从字符串第二位开始截取到末尾,然后补上第一位
cout << A << endl;
if (!A.compare(B)) return true;
}
return false;
}
完整代码:
#include<iostream>
#include<string>
using namespace std;
bool determineString(string A, string B) {
if (A.length() != B.length() || !A.compare(B))return !A.compare(B);
int strALen = A.length();
while (strALen-- > 0) {
A = A.substr(1) + A[0];//从字符串第二位开始截取到末尾,然后补上第一位
cout << A << endl;
if (!A.compare(B)) return true;
}
return false;
}
int main() {
string A = "12345";
string B = "51234";
cout << determineString(A, B) << endl;
return 0;
}
|