在 C++ 中最多使用每个字符一次可以从另一个字符串形成的字符串计数

我们有两个字符串,即 str1 和 str2,任务是计算可以完全从另一个字符串生成的字符串的数量,但我们可以使用一个字符来形成字符串。比如,我们将取两个字符串 str1 和 str2 并通过使用 str1 的字符恰好一次检查 str1 中 str2 的出现。

输入- str_1 = "技术学习", str_2 = "学习"

输出- 可以使用每个字符最多一次从另一个字符串形成的字符串计数是 - 1

说明- 正如我们所见,str_2 只在 str_1 中出现一次。因此,str_2 中 str_1 的计数为 1。

输入- str_1 = “elohsehelloabcoelhl,str_2 = “你好”

输出- 可以使用每个字符最多一次从另一个字符串形成的字符串计数是 - 3

说明- 正如我们所见,str_2 是 hello,因此我们将使用 str_1 的字符检查一次单词 hello 的形成。正如我们所见,在 str_1 中有 3 种形式的 hello,因此计数为 3。

下面程序中使用的方法如下

  • 输入字符串 str_1 和 str_2 并计算它们对应的长度并将数据传递给函数进行进一步处理。

  • 声明一个临时变量 count 来存储 str_1 中 str_2 的计数,并用 INT_MAX 对其进行初始化。INT_MAX 在 C++ 中用于指定变量可以容纳的最大值,INT_MAX 的值为 +2147483647。

  • 创建一个大小为 26 的数组,因为我们有 26 个英文字母,并将其初始化为 0。

  • 从 0 开始循环 FOR 直到字符串 str_1 的长度并将 arr[str_1[i] - 'a'] 设置为 1

  • 从 0 开始另一个循环 FOR,直到字符串 str_2 的长度,并将计数设置为计数或 arr[str_2[i] - 'a'] 的最小值。

  • 返回计数

  • 打印结果。

示例

#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

猜你喜欢