解决Codefights arrayRearrange

时间:2017-12-14 21:51:16

标签: javascript arrays string nested-loops

所以我一直在研究这个问题......我认为我的算法错误比代码本身更多。我真的希望能解决这个问题,所以我可以继续练习!

我正在寻找有关我可能缺少的边缘情况的反馈。

问题是:

  

给定一个等长字符串数组,检查是否可以   以重新排列后的方式重新排列字符串   连续位置的字符串恰好相差一个   字符。

     

实施例

     

对于inputArray = [“aba”,“bbb”,“bab”],输出应为   stringsRearrangement(inputArray)= false;

     

所有重新排列都不符合描述条件。

     

对于inputArray = [“ab”,“bb”,“aa”],输出应为   stringsRearrangement(inputArray)= true。

     

字符串可以按以下方式重新排列:“aa”,“ab”,“bb”。   输入/输出

     

[时间限制] 4000ms(js)

     

[input] array.string inputArray

     

小写字母的非空数组。

     

保证约束:2≤inputArray.length≤10,1≤   inputArray [i].length≤15。

     

[output] boolean

我写了以下代码来检查:

  • 与arr.string有多少连接到其他arr.string(s)。我在线检查这个,但也制作了一个视觉矩阵。
  • 如果arr.string没有其他连接:false;
  • 如果arr.string在规则之后只有另一个连接,那么它必须是一个端点。端点++
  • 只能有2个端点。端点>假的;
  • 如果所有这些都是真的,则返回true;

对于可能未涵盖哪些边缘情况的任何输入都表示赞赏。

function stringsRearrangement(inputArray) {

    var sort = inputArray;
    var count = 0;
    var matrix = [];
    var hold = [];
    var connections = 0;
    var duplicate = 0;
    var endpoints = 0;
    var alpha = "abcdefghijklmnopqrstuvwxyz"

    // array.string base case
    for (let j = 0; j < sort.length; j++) {
        // loop string[0] case
        for (let x = 0; x < sort.length; x++) {
            // loop sting[0][0]
            for (let i = 0; i < sort[0].length; i++) {
                // check to see if index is equal to checker, if not, add to count
                if (alpha.indexOf(sort[j][i]) != alpha.indexOf(sort[x][i])) {
                    count++
                }
            }
            // if array.string only has one connection add to the holdCount
            if (count == 1) {
                connections++
            }
            // push string.array connections to another matrix
            hold.push(count);
            count = 0;
        }
        // hold count = [0, 1, 2, 2] 
        // if arr.string has no connection it fails
        if (!hold.includes(1)) {
            console.log(sort[j] + " has no connections");
            return false;
            // if arr.string has only 1 connection holdCount++
        } else if (connections == 1) {
            endpoints++
        }
        // reset holdCount
        connections = 0;
        // push restulting hold to matrix
        matrix.push(hold);
        // reset hold{}
        hold = [];
    }
    console.log(matrix);
    console.log("endpoint count = " + endpoints);
    // if more than 2 arr.string on have 1 connector
    if (endpoints > 2) {
        console.log("endpoints > 2; endpoint count = " + endpoints);
        return false;
    }
    // otherwise return true
    return true;
}

0 个答案:

没有答案