09 字符串轮转
字符串轮转
题目描述
字符串轮转。给定两个字符串 s1 和 s2,请编写代码检查 s2 是否为 s1 旋转而成(比如,waterbottle 是 erbottlewat 旋转后的字符串)。
示例 1:
1
2
输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True
示例 2:
1
2
输入:s1 = "aa", "aba"
输出:False
提示:
字符串长度在[0, 100000]范围内。
说明:
你能只调用一次检查子串的方法吗?
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var isFlipedString = function (s1, s2) {
if (s1.length !== s2.length) return false;
if (!s1) return true;
let testLength = 1;
while (testLength <= s1.length) {
const otherLength = s1.length - testLength;
if (
s1.slice(0, testLength) === s2.slice(otherLength) &&
s1.slice(testLength) === s2.slice(0, otherLength)
) {
return true;
}
testLength++;
}
return false;
};
解析
- 首先,如果 s1 和 s2 的长度不相等,那么肯定不是旋转字符串
- 其次,如果将两个 s1 字符串相连接,一定会包含旋转字符串的所有情况,此时直接判断 s2 是否为 s1+s1 的子串即可
1
2
3
function isFlipedString(s1, s2) {
return s1.length === s2.length && (s2 + s2).indexOf(s1) !== -1;
}
本文由作者按照
CC BY 4.0
进行授权