日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在本文中,我們將深入研究計算機科學領域中一個獨特且令人著迷的問題 – “計算字符串中恰好出現 K 次的 M 長度子字符串”。這類問題在編程競賽和面試中經常遇到。在開始之前,讓我們定義一下我們正在處理的內容 –

    子字符串??在另一個字符串中找到的連續序列。

    M 長度??我們感興趣的子字符串的長度。

    K 次??子字符串應在原始字符串中出現的確切次數。

    算法說明

    為了解決這個問題,我們將利用哈希映射(在 C++ 中也稱為無序映射)的強大功能。哈希映射允許我們以鍵值對的形式存儲數據,并為搜索和插入操作提供恒定的時間復雜度,使其成為解決此類問題的絕佳工具。

    計算字符串中恰好出現 K 次的 M 長度子串的算法如下 –

      初始化一個空的哈希映射。

      迭代字符串,創建所有可能的 M 長度子字符串。

      對于每個子字符串,將其添加到哈希映射中。如果它已經存在,則增加其計數。

      計算完所有子字符串后,迭代哈希映射以查找恰好出現 K 次的所有子字符串。

      C++ 實現

      這是上述算法的 C++ 實現 –

      示例

      #include<bits/stdc++.h>
      using namespace std;
      
      int countSubstrings(string s, int M, int K) {
         unordered_map<string, int> count_map;
         int n = s.length();
         
         for (int i = 0; i <= n - M; i++) {
            string substring = s.substr(i, M);
            count_map[substring]++;
         }
         
         int count = 0;
         for (auto it : count_map) {
            if (it.second == K)
               count++;
         }
      
          return count;
      }
      
      int main() {
         string s = "abcabcabc";
         int M = 3;
         int K = 3;
         
         int result = countSubstrings(s, M, K);
         cout << "The number of M-length substrings occurring exactly K times is: " << result << endl;
         
         return 0;
      }
      

      登錄后復制

      輸出

      The number of M-length substrings occurring exactly K times is: 1
      

      登錄后復制

      在上面的代碼中,countSubstrings函數將輸入字符串s、子字符串的長度M和出現的次數K作為參數。它初始化一個無序映射 count_map 來跟蹤所有子字符串及其出現次數。然后它迭代該字符串以創建長度為 M 的所有可能的子字符串,并且對于每個子字符串,它都會增加映射中的計數。一旦計算完所有子字符串,它就會迭代映射以計算恰好出現 K 次的所有子字符串。

      main函數是代碼執行開始的地方。它初始化字符串 s 以及 M 和 K 的值。然后調用 countSubstrings 函數并打印結果。

      測試用例示例

      讓我們考慮字符串“abcabcabc”,其中 M=3 且 K=3。

      這里,M長度的子串是“abc”,“bca”,“cab”,“abc”,“bca”,“cab”,“abc”。很明顯,子字符串“abc”在字符串中恰好出現了 3 次,因此程序的輸出將為 1。

      這種解決問題的方法,我們使用哈希映射來計算子字符串,是計算機科學中時空權衡的一個很好的例子。當我們使用額外的空間來存儲子字符串及其計數時,我們可以通過在恒定時間內計算出現次數來顯著降低問題的時間復雜度。

      時間和空間復雜度

      該算法的時間復雜度為O(n),其中n是字符串的長度。這是因為我們只迭代字符串一次來創建所有可能的 M 長度子字符串。

      由于哈希映射的存儲要求,空間復雜度也是 O(n),在最壞的情況下,每個子字符串都是唯一的,導致映射中存在 n 個不同的條目。

      結論

      在本文中,我們研究了計算機科學中的一個常見問題 – 計算在字符串中恰好出現 K 次的 M 長度子字符串的數量。我們使用哈希映射在 C++ 中實現了一個高效的解決方案,它為我們提供了恒定時間的搜索和插入操作。這個問題是如何結合使用數據結構和算法來有效解決復雜問題的完美示例。

      以上就是計算字符串中恰好出現K次的長度為M的子串的數量的詳細內容,更多請關注www.xfxf.net其它相關文章!

分享到:
標簽:計算字符串子串
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定