目錄
問題陳述
方法
#方法一:暴力破解
範例
輸出
方法二:兩個指標法
結論
首頁 web前端 js教程 在 JavaScript 中計算匹配字串

在 JavaScript 中計算匹配字串

Aug 23, 2023 pm 11:21 PM

在 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

開始使用Chart.js:PIE,DONUT和BUBBLE圖表 開始使用Chart.js:PIE,DONUT和BUBBLE圖表 Mar 15, 2025 am 09:19 AM

本教程將介紹如何使用 Chart.js 創建餅圖、環形圖和氣泡圖。此前,我們已學習了 Chart.js 的四種圖表類型:折線圖和條形圖(教程二),以及雷達圖和極地區域圖(教程三)。 創建餅圖和環形圖 餅圖和環形圖非常適合展示某個整體被劃分為不同部分的比例。例如,可以使用餅圖展示野生動物園中雄獅、雌獅和幼獅的百分比,或不同候選人在選舉中獲得的投票百分比。 餅圖僅適用於比較單個參數或數據集。需要注意的是,餅圖無法繪製值為零的實體,因為餅圖中扇形的角度取決於數據點的數值大小。這意味著任何占比為零的實體

初學者的打字稿,第2部分:基本數據類型 初學者的打字稿,第2部分:基本數據類型 Mar 19, 2025 am 09:10 AM

掌握了入門級TypeScript教程後,您應該能夠在支持TypeScript的IDE中編寫自己的代碼,並將其編譯成JavaScript。本教程將深入探討TypeScript中各種數據類型。 JavaScript擁有七種數據類型:Null、Undefined、Boolean、Number、String、Symbol(ES6引入)和Object。 TypeScript在此基礎上定義了更多類型,本教程將詳細介紹所有這些類型。 Null數據類型 與JavaScript一樣,TypeScript中的null

See all articles