javascript - 检查两个字符串是否在旋转方向上彼此相等

标签 javascript string for-loop equality

我需要您在以下方面的帮助:我正在尝试开发一个函数,该函数应该检查两个参数字符串是否在旋转方向上彼此相等。比如,如果我们顺时针旋转两次,'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/

相关文章:

c - 如何在 C 中连接 const/literal 字符串?

r - 在 R 中使用嵌套 for 循环创建数据框

javascript - setTimeout 函数不适用于 for 循环

c - 使用 scanf 将一串整数捕获到 C 中的数组中

javascript - angularjs Controller 内的动态表

javascript - 如何从 asp 页面将表的内容或 sql 查询的结果发送到剪贴板?

c - C语言中如何将字符串变为空

javascript - 消息管理器 API sendAsyncMessage 回调

javascript - AngularJS:在单独的行中显示对象数组

javascript - jQuery 从输入字符串中添加/删除文本