我需要您在以下方面的帮助:我正在尝试开发一个函数,该函数应该检查两个参数字符串是否在旋转方向上彼此相等。比如,如果我们顺时针旋转两次,'abcd' 将变为 'cdab',因此如果上述字符串作为参数提供,我的函数应该返回 'true'。我最初解决这个问题的想法是检查两个字符串中每个字符之间是否存在常量移位,所以我尝试了
function areRotEq (str1, str2) {
var shift = null;
for(char of str1){
if(!shift) shift = str2.indexOf(char);
else if (shift != str2.indexOf(char)) return false
}
return true;
}
但是,它甚至无法正确评估上述简单字符串并返回“false”。如果您能指出正确的方向以弄清楚为什么我的代码不起作用,或者建议一些更有效的方法来解决我的问题,我们将不胜感激。 提前致谢!
最佳答案
这是另一种方法:
首先,进行绝对正确或错误的“快速”检查。
然后,检查 str2 中 str1 的第一个字符。此时将其拆分并将第一部分粘贴到最后一部分之后。如果两者相等,则它们是旋转的。
警告:这不适用于多次包含相同字符的字符串。
function areRotEq (str1, str2) {
if (str1 === str2) return true;
if (str1.length !== str2.length) return false;
var start2 = str2.indexOf(str1[0]);
if (start2 === -1) return false;
return str1 === str2.slice(start2) + str2.slice(0, start2)
}
console.log(
areRotEq("abcd", "abcd"),
areRotEq("abcd", "acdb"),
areRotEq("abcd", "dabc"),
areRotEq("dcab", "abdc")
);
关于javascript - 检查两个字符串是否在旋转方向上彼此相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579039/