用 C++ 統計可由另一個給定字串構造的字串的出現次數


我們得到兩個輸入字串 str_1 和 str_2。目標是找到可以使用 str_1 中的字母構造的與 str_2 相同的字串的計數,其中每個字元只使用一次。

注意 - 兩個字串中的所有字母都使用相同的大小寫。

讓我們透過例子來理解。

輸入 - str_1 = "abcaaaabca",str_2 = "bca";

輸出 - 可由另一個給定字串構造的字串的出現次數為:2

解釋 - str_a 中的子串 bca -

str_1[1-3]=”bca” and str[7-9]=”bca”

輸入 - str_1 = "about",str_2 = "cout";

輸出 - 可由另一個給定字串構造的字串的出現次數為 - 0

解釋 - str_a 中不存在子串 cout。

下面程式中使用的方案如下

我們首先計算 str_1 中所有字母的頻率,並將其儲存在陣列 arr_1[26] 中,並將 str_2 中所有字母的頻率儲存在陣列 arr_2[26] 中。

  • 獲取兩個字串 str_1 和 str_2。計算長度為 str_1.size() 和 str_2.size()。

  • 函式 count_string(string str_1, int len_str_1, string str_2, int len_str_2) 獲取兩個字串和長度,並返回可由 str_1 構造的 str_2 字串的數量。

  • 將初始計數設定為 INT_MAX。

  • 初始化兩個陣列 arr_1[26] 用於儲存 str_1 中字元的頻率,arr_2[26] 用於儲存 arr_2 中字元的頻率,初始值為 0。

  • 使用 for 迴圈遍歷 str_1 和 str_2,並更新 arr_1 和 arr_2 中的頻率。

  • 現在再次使用 for 迴圈遍歷 arr_2,如果當前頻率 arr_2[i] 不為零,則計算 count(前一個值)和 arr_1[i]/arr_2[i] 的最小值(對於 str_2 的每個字元,只從 str_1 中取每個字母一次)。

  • 最後,count 將具有 str_1 和 str_2 的匹配對應字元的最小值。例如 aaabbbb (a=3,b=4) 和 abb(a=1,b=2) 最小計數將為 1

  • 在所有迴圈結束時返回 count 作為所需結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int count_string(string str_1, int length_str_1, string str_2, int length_str_2){
   int count = INT_MAX;
   int arr_1[26] = { 0 };
   int arr_2[26] = { 0 };
   for (int i = 0; i < length_str_1; i++){
      arr_1[str_1[i] - 'a']++;
   }
   for (int i = 0; i < length_str_2; i++){
      arr_2[str_2[i] - 'a']++;
   }
   int total_alphabets = 26;
   for (int i = 0; i < total_alphabets; i++){
      if(arr_2[i]){
         count = min(count, arr_1[i] / arr_2[i]);
      }
   }
   return count;
}
int main(){
   string str_1 = "knowledge", str_2 = "know";
   int length_str_1 = str_1.size();
   int length_str_2 = str_2.size();
   cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str_1, str_2, length_str_2);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count occurrences of a string that can be constructed from another given string are: 1

更新於:2020年12月1日

160 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.