一、题目
给定两个字符串, A
和 B
。
A
的旋转操作就是将 A
最左边的字符移动到最右边。 例如, 若 A = 'abcde'
,在移动一次之后结果就是'bcdea'
。如果在若干次旋转操作之后,A
能变成B
,那么返回True
。
示例 1: 输入: A = 'abcde', B = 'cdeab' 输出: true 示例 2: 输入: A = 'abcde', B = 'abced' 输出: false
注意:
A
和B
长度不超过100
。
二、题解思路
- 题解思路:先考虑特殊情况,若A==B,则肯定A可以变成B,返回true,若字符串长度都不等,显然返回false。接下来考虑一般情况,每次将A的第一个元素放到最后,然后后面的往前移位,判断一次变换后的是否与B相等,若相等则返回true,如果在旋转次数大于A的长度还没有出现相等的情况,则跳出循环,返回false。
三、代码实现
- C++代码实现
class Solution {
public:
bool rotateString(string A, string B)
{
int counts = 1;
if(A == B) //字符串一样的情况
return true;
if(A.size() != B.size()) //字符串长度不等的情况
return false;
while(counts != A.size()+1)
{
char temp = A[0]; //记录第一个值
for(int i = 0;i<A.size()-1;i++)
A[i] = A[i+1];
A[A.size()-1] = temp; //将第一个值赋值给最后一个值,完成一旋转
if(A == B)
return true;
else
counts++; //记录进行了多少次旋转,当旋转次数大于字符长度还没有相等,则说明不存在
}
return false;
}
};