所以我一直在研究这个问题......我认为我的算法错误比代码本身更多。我真的希望能解决这个问题,所以我可以继续练习!
我正在寻找有关我可能缺少的边缘情况的反馈。
问题是:
给定一个等长字符串数组,检查是否可以 以重新排列后的方式重新排列字符串 连续位置的字符串恰好相差一个 字符。
实施例
对于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
我写了以下代码来检查:
对于可能未涵盖哪些边缘情况的任何输入都表示赞赏。
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;
}