首頁 > web前端 > js教程 > 主體

在 JavaScript 中計算匹配字串

PHPz
發布: 2023-08-23 23:21:03
轉載
1348 人瀏覽過

在 JavaScript 中计算匹配子字符串

準確計算給定字串中匹配子字串的能力是 JavaScript 程式設計的關鍵技能,因為它使開發人員能夠有效地分析和操作文字資料。本文深入探討字串操作領域,探討了在 JavaScript 中計算匹配子字串的複雜性,採用了一系列鮮為人知的技術。透過闡明底層邏輯並採用這些非常規方法,開發人員可以更深入地了解如何有效地統計特定子字串的出現次數,從而使他們能夠從文字資料中提取有意義的見解。與我們一起踏上這段啟發性的旅程,我們將釋放 JavaScript 強大功能的潛力,並擴展我們豐富的詞彙庫,以掌握計算匹配子字串的藝術。

問題陳述

我們需要一個 JavaScript 函數來計算給定字串中的子序列,並採用名為「str」的字串輸入和名為「arr」的字串輸入陣列。目標是檢查“arr”中的每個元素並確定作為“str”子序列的字串數量。子序列是指透過從原始字串中刪除字元而保持剩餘字元的相對順序而形成的字串。函數應仔細比較“arr”和“str”中的每個元素,並確定是否可以透過從“str”中刪除字元來構造它。然後它將傳回一個整數,表示在「str」中找到的合格子序列的計數。

範例輸入 -

#
str = 'abracadabra';
arr = ['a', 'bra', 'cad', 'dab'];
登入後複製

範例輸出 -

Output =4;
登入後複製

#輸出說明 -

#在給定的輸入中,字串“str”是“abracadabra”,陣列“arr”包含 ['a', 'bra', 'cad', 'dab']。

分析「arr」的每個元素,我們發現「a」、「bra」、「cad」和「dab」都是「str」的子序列。因此,子序列的計數為 4,這是預期的輸出。

方法

在本文中,我們將看到多種不同的方法來解決 JavaScript 中的上述問題 -

  • 暴力破解方法

  • #雙指標方法

#方法一:暴力破解

計算有效子序列的強力方法涉及產生字串的所有可能的子序列並檢查它們在陣列中的存在。我們迭代每個字串,遞歸地或使用位元操作產生子序列,並將它們與陣列元素進行比較。每場比賽計數器都會遞增,給出總計數。對於較大的輸入,此方法的計算成本很高,因此動態規劃等替代演算法提供了更最佳化的解決方案。

範例

此程式碼實作了遞歸演算法來計算字串陣列 (arr) 中給定字串 (str) 的子序列數。 countSubsequences 函數初始化一個計數變數來追蹤有效的子序列。 generateSubsequences 函數透過迭代輸入字串並檢查陣列中是否存在每個子序列來產生所有可能的子序列。進行遞歸呼叫是為了探索包含或排除字元的不同可能性。主函數呼叫從字串的開頭開始產生子序列。計數變數作為最終結果傳回。範例用法透過範例字串和字串陣列演示了該函數的用法。結果被儲存並列印到控制台。

function countSubsequences(str, arr) {
   let count = 0;
 
   // Generate all possible subsequences of the input string
   function generateSubsequences(sub, index) {
      if (index === str.length) {
         // Check if the subsequence exists in the array
         if (arr.includes(sub)) {
            count++;
         }
         return;
      }
 
      // Include the current character in the subsequence
      generateSubsequences(sub + str[index], index + 1);
 
      // Exclude the current character from the subsequence
      generateSubsequences(sub, index + 1);
   }
 
   // Start generating subsequences from the beginning of the string
   generateSubsequences("", 0);
 
   return count;
}
 
// Example usage:
const str = "abcde";
const arr = ["a", "ab", "bd", "abc", "acde", "eab"];
const result = countSubsequences(str, arr);
console.log(result);
登入後複製

輸出

以下是控制台輸出 -

5
登入後複製
登入後複製

方法二:兩個指標法

該演算法遍歷數組中的每個字串並使用兩個指針,一個指定給給定的字串,另一個指定當前正在檢查的字串。這些指標最初位於其對應字串的起始字元處,隨後向前推進,直到遇到任一字串的終點。每次確定有效子序列時,都會對數字指示符進行增量。最終,演算法提供指標的數值作為最終結果。

範例

函數 countValidSubsequences 將字串陣列 (arr) 和目標字串 (target) 作為參數。它迭代 arr 中的每個字串,並使用嵌套循環將其字元與 target 中的字元進行比較。如果字元匹配,則索引遞增;如果它們不匹配,則僅增加目標的索引。如果整個字串是有效子序列,則計數遞增。迭代完 arr 中的所有字串後,函數傳回最終計數。

function countValidSubsequences(arr, target) {
   let count = 0;
 
   for (let i = 0; i < arr.length; i++) {
      const current = arr[i];
      let j = 0;
      let k = 0;
 
      while (j < current.length && k < target.length) {
         if (current[j] === target[k]) {
            j++;
            k++;
         } else {
            k++;
         }
      }
 
      if (j === current.length) {
         count++;
      }
   }
 
   return count;
}
 
// Example usage: 
const str = "abcde"; 
const arr = ["a", "ab", "bd", "abc", "acde", "eab"]; 
const result = countValidSubsequences(arr, str); 
console.log(result);
登入後複製

輸出

以下是控制台輸出 -

5
登入後複製
登入後複製

結論

最終,對 JavaScript 中匹配子字串計數的探索發現了許多巧妙的技術,可以用來有效地完成這項任務。透過採用各種演算法並利用該語言很少使用的功能,程式設計師可以設計出優雅且足智多謀的解決方案。必須承認,子字串匹配的複雜性需要仔細考慮邊緣情況和潛在的性能影響。然而,有了這些新發現的見解,開發人員可以超越傳統方法並充分利用 JavaScript 的潛力來巧妙地列舉和操作子字串。總之,本文分享的深奧知識使程式設計師能夠提高他們的編碼能力並解鎖 JavaScript 中子字串計數的新維度。

以上是在 JavaScript 中計算匹配字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!