版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86258246
day15, 旋转字符串
题目来源:leetcode
给定两个字符串, A 和 B。
A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。
示例 1:
输入: A = ‘abcde’, B = ‘cdeab’
输出: true
示例 2:
输入: A = ‘abcde’, B = ‘abced’
输出: false
解答:这是一个很简单很简单的题目,这里主要是介绍一种优秀的做法。
首先说我的做法,比较常规,先A与B比较,若 A = B 则return true,否则,开始对A移动,设置个标志flag = 0,用来记录已经多少次移动A,当A==A.size()时候表示二者无法通过移动来使其相等,返回false.
代码:
class Solution {
public:
string move( string A){
string B = "";
B += A[ A.size() - 1];
for( int i = 0; i < A.size() - 1; i++)
B = B + A[i];
return B;
}
bool rotateString(string A, string B) {
if( A.size() != B.size())
return false;
int flag = 0;
while( 1){
if( A == B)
return true;
if( flag == A.size() + 1)
return false;
A = move( A);
flag++;
}
return false;
}
};
结果:一如既往的渣渣。
贴上一个大神的做法,没什么好说的,认真感悟+膜拜。
return A.length() == B.length() && (A + A).find(B) != string::npos;