使用 C++ 從另一個字串中最多使用每個字元一次可以形成的字串數量
給定兩個字串,即 str1 和 str2,任務是計算可以使用另一個字串中的每個字元最多一次完全生成的字串的數量。例如,我們將取兩個字串 str1 和 str2,並檢查 str2 是否完全出現在 str1 中,並且每個字元只能使用一次。
輸入 − str_1 = "technical learning", str_2 = "learning"
輸出 − 可以從另一個字串中最多使用每個字元一次形成的字串數量為 − 1
解釋 − 正如我們所看到的,str_2 完全出現在 str_1 中一次。因此,str_1 中 str_2 的計數為 1。
輸入 − str_1 = “ellohsehelloabcoelhl”, str_2 = “helllo”
輸出 − 可以從另一個字串中最多使用每個字元一次形成的字串數量為 − 3
解釋 − 正如我們所看到的,str_2 是 hello,因此我們將檢查使用 str_1 的字元(每個字元只使用一次)形成單詞 hello 的方法。正如我們所看到的,在 str_1 中有 3 種形成單詞 hello 的方法,因此計數為 3。
下面程式中使用的方法如下
輸入字串 str_1 和 str_2,計算它們的長度,並將資料傳遞給函式以進行進一步處理。
宣告一個臨時變數 count 來儲存 str_2 在 str_1 中的計數,並將其初始化為 INT_MAX。在 C++ 中,INT_MAX 用於指定變數可以容納的最大值,INT_MAX 的值為 +2147483647。
建立一個大小為 26 的陣列,因為英語中有 26 個字母,並將其初始化為 0。
從 0 開始迴圈到字串 str_1 的長度,並將 arr[str_1[i] - ‘a’] 設定為 1。
從 0 開始迴圈到字串 str_2 的長度,並將 count 設定為 count 或 arr[str_2[i] - ‘a’] 的最小值。
返回 count
列印結果。
示例
#include <bits/stdc++.h> using namespace std; int atmost_once(string str_1, int len_str1, string str_2, int len_str2){ int count = INT_MAX; int arr[26] = { 0 }; for (int i = 0; i < len_str1 ; i++){ arr[str_1[i] - 'a'] += 1; } for (int i = 0; i < len_str2; i++){ count = min(count, arr[str_2[i] - 'a']); } return count; } int main(){ string str_1 = "technical learning"; int length_str1 = str_1.length(); string str_2 = "learning"; int length_str2 = str_2.length(); cout<<"Count of strings that can be formed from another string using each character at-most once are: "<<atmost_once(str_1,length_str1, str_2, length_str2); return 0; }
輸出
如果我們執行上述程式碼,它將生成以下輸出:
Count of strings that can be formed from another string using each character at-most once are: 1