我需要您在以下方面的帮助:我正在尝试开发一个函数,用于检查两个参数字符串是否在旋转上彼此相等。就像,如果我们顺时针旋转两次,'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”。如果你能指出我正确的方向来弄清楚为什么我的代码不起作用,或者建议一些更有效的方法来解决我的问题,我将不胜感激。
先感谢您!

最佳答案

您的解决方案不起作用,因为您错误地计算了类次,这是您可以解决的方法:

function areRotEq (str1, str2) {
    var shift = null;
    let i = 0;
    for(char of str1){
        if(!shift) shift = str2.indexOf(char);
        else {
            const currentShift = Math.abs(str2.indexOf(char) - i);
            if (shift != currentShift) return false;
        }
        i++;
    }
    return true;
}

这是连接技巧解决方案:

function areRotEq (str1, str2) {
    if (str1.length != str2.length) return false;
    return (str1 + str1).indexOf(str2) != -1;
}

关于javascript - 检查两根弦在旋转方向上是否相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56579039/

10-09 15:55