题目描述:
给定两个字符串, A
和 B
。
A
的旋转操作就是将 A
最左边的字符移动到最右边。 例如, 若 A = 'abcde'
,在移动一次之后结果就是 'bcdea'
。如果在若干次旋转操作之后,A
能变成 B
,那么返回 true
。
示例 :
输入: A = 'abcde', B = 'cdeab' 输出: true
输入: A = 'abcde', B = 'abced' 输出: false
注意:
A
和B
长度不超过100
。
方法分析:
该题从定义出发。A的旋转字符串即依次将A最左边的字符移动到最右边即可。那么A一共有多少个旋转字符串呢?应该是A.length个(包括A自身)。把所有A的旋转字符串放入一个数组之中,最后判断该数组中是否包含B,即可知道B是否为A的旋转字符串了。
代码实现:
var rotateString = function(A, B) {
let len = A.length;
let result = [A];
for(let i = 0;i < len - 1;i++){
A = A.slice(1) + A[0];
result.push(A);
}
return result.includes(B);
};
还有一种简便的方法:
var rotateString = function(A, B) {
if(A.length != B.length) return false;
return A.repeat(2).includes(B);
};
代码解析:
方法一是从定义出发,依次得到每个旋转字符串,最后判断B是否在旋转字符串列表之中;而方法二是将A进行了一次重复,这样,从任意索引开始,肯定能得到其所有的旋转字符串。这两种方法都用到了ES6的相关知识。查看repeat方法,请访问:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/repeat;查看includes方法,请访问:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/includes。