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 中實現此演算法,我們可以有效地解決任何給定字串陣列的此問題。

更新於: 2023年4月17日

259 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.