使用 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