计算C ++中两个字符串中的公共字符

我们给了两个字符串,分别是str1和str2,任务是找到两个字符串中的公共字符数,即如果str1 [i] = str [j],则它们将被视为一对,并且计数将增加到1,如果str1 [i]!= str2 [j],则它们不会被视为一对,并且计数也不会增加到1。

例如

Input − str1 = “hello”
      str2 = “heoo”Output − count is: 3

说明 -str1 [0] = str2 [0]即h;str1 [1] = str2 [1]即e;str1 [2]!= str2 [2]即l和o; str1 [3] = str2 [3] ieo因此,具有相似字母的对是3和1对包含不同字母的对。

Input − str1 = “point”
      str2 = “print”Output − count is: 4

说明-str1 [0] = str2 [0]即p;str1 [1]!= str2 [1]即o和r;str1 [2] = str2 [2]即i; str1 [3] = str2 [3]即n;str1 [4] = str2 [4] iet因此,具有相似字母的对是4和1对包含不同字母的对。

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

  • 输入两个字符串str1和str2

  • 使用length()函数将计算两个字符串的大小,该函数将根据字符串中包含空格的字母数返回一个整数值。

  • 最初,用0初始化两个字符串中的字符频率。

  • 现在,要更新str1的频率,请应用“ f1 [str1 [i]-'a'] ++”,这将增加每次迭代的频率,并对str2进行相同的处理

  • 为了计算对数,对min()f1和f2应用函数。

  • 显示结果

示例

#include <iostream>
using namespace std;
//计算有效索引对的功能
int pairs(string str1, int size1, string str2, int size2){
   //f1和f2表示字符的频率
   //字符串str1和str2-
   int f1[26] = { 0 };
   int f2[26] = { 0 };
   //'c'计算有效对
   int i, c = 0;
   //更新str1和st2的频率
   for (i = 0; i < size1; i++){
      f1[str1[i] - 'a']++;
   }
   for (i = 0; i < size2; i++){
      f2[str2[i] - 'a']++;
   }
   //查找有效对的数量
   for (i = 0; i < 26; i++){
      c += (min(f1[i], f2[i]));
   }
   return c;
}
//主要功能
int main(){
   string str1 = "nhooo", str2 = "codingground";
   int size1 = str1.length(), size2 = str2.length();
   cout<<”Total pairs with str1[i]=str2[j] are: ”;
   cout << pairs(str1, size1, str2, size2);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Total pairs with str1[i]=str2[j] are − 6