JavaScript 使所有字符串相等的最少移动操作次数
有许多问题需要一定的专业知识和创造力来解决。其中一个问题是确定使所有字符串相等所需的最少移动次数。在本文中,我们将使用JavaScript编程来解决这个问题。首先,让我们定义一下问题。
问题陈述
给定一个字符串数组,我们需要找到使所有字符串相等所需的最少移动次数。在一次移动中,我们可以将字符串的第一个字符移动到该字符串的末尾。
示例
考虑以下字符串数组:
["abcd", "cdab", "bacd", "cdba"]
我们可以通过以下操作使所有字符串都变为”abcd”:
- 将第二个字符串的第一个字符移动到末尾:”cdab” -> “dabc”
-
将第三个字符串的第一个字符移动到末尾:”bacd” -> “acdb”
-
将第四个字符串的第一个字符移动到末尾:”cdba” -> “dbac”
经过这些操作,所有字符串都变为”abcd”。使所有字符串相等所需的最少操作数为2。
示例1
Input: n = 4, arr[] = {"abcd", "cdab", "bacd", "cdba"}
输出:最小移动次数:2
示例2
Input: n = 2, arr[] = {"molzv", "lzvmo"}
输出:最少移动次数:2
示例3
Input: n = 3, arr[] = {"kc", "kc", "kc"}
输出:最小次数:0
现在让我们理解上述问题陈述的算法。
步骤
让我们深入算法,了解找到使所有字符串相等所需的最小移动次数的步骤。
- 将变量“minCnt”初始化为一个非常大的值。
-
遍历数组中的每个字符串。
-
对于每个字符串,找到使所有字符串相等所需的最小移动次数。为此,遍历数组中的每个字符串,并执行以下操作:
-
将当前字符串附加到自己(创建一个循环字符串)。
-
在循环字符串中找到当前字符串的索引。将此索引添加到计数器“cnt”中。
-
遍历数组中的所有字符串后,将“minCnt”更新为“minCnt”和“cnt”的最小值。
-
将“minCnt”作为使所有字符串相等所需的最小移动次数返回。
现在,让我们以一个示例为例,使用Javascript实现此算法。
示例
该程序定义了一个名为’minMoves’的函数,它接受两个参数’str’和’n’。’str’是字符串数组,’n’是数组的长度。函数遍历数组中的每个字符串,并对于每个字符串,计算将该字符串转换为数组中的所有其他字符串所需的移动次数。移动定义为将字符串的第一个字符移到字符串的末尾。函数返回将所有字符串在数组中互相转换所需的最小移动次数。
程序然后定义了一个名为’str’的数组,并使用该数组及其长度调用’minMoves’函数。结果被记录为一个字符串,并通过控制台输出,该字符串表示“最小次数:”后跟将所有字符串在数组中互相转换所需的最小移动次数。
function minMoves(str, n) {
let minCnt = Infinity;
for (let i = 0; i < n; ++i) {
let cnt = 0;
for (let j = 0; j < n; ++j) {
const temp = str[j] + str[j];
const index = temp.indexOf(str[i]);
if (index !== -1) {
cnt += index;
}
}
minCnt = Math.min(cnt, minCnt);
}
return minCnt;
}
const str = ["abcd", "cdab", "bacd", "cdba"];
console.log("Minimum moves: " + minMoves(str, str.length));
结论
在本教程中,我们讨论了寻找使所有字符串相等所需的最小移动次数的问题。我们提出了一个算法和相应的JavaScript程序来解决这个问题。
算法涉及遍历数组中的每个字符串,并找到使所有字符串等于它所需的最小移动次数。为了做到这一点,我们通过将当前字符串追加到它自身来创建一个循环字符串,然后找到循环字符串中当前字符串的索引。我们使用这个索引值更新一个计数器,并继续对数组中的所有字符串做同样的操作。
最后,我们返回计数器的最小值作为使所有字符串相等所需的最小移动次数。通过在JavaScript中实现这个算法,我们可以高效地解决任何给定的字符串数组的问题。