在C ++中制作两个字符串字谜的最小步骤数

假设我们有两个相等大小的字符串s和t。第一步,我们可以选择t的任何字符并将其替换为另一个字符。我们必须找到制作s字谜的最少步骤数。注意:字符串的Anagram是包含相同字符且具有不同(或相同)顺序的字符串。

因此,如果输入类似-“ yxy”和“ xyx”,则输出将为1,因为仅需要替换一个字符。

为了解决这个问题,我们将遵循以下步骤-

  • n:= s中字符的大小

  • 制作一个映射m,并用s中出现的每个字符的频率填充它,制作另一个映射m2,并用t中出现的每个字符的频率填充它

  • ret:= n

  • 对于每个键值对,以m为单位

    • x:=它的值的最小值,和m2 [它的值]的值

    • 将ret降低1

  • 返回ret

范例(C ++)

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>

using namespace std;

class Solution {

public:

   int minSteps(string s, string t) {

      int n = s.size();

      map <char, int> m1;

      for(int i = 0; i < s.size(); i++){

         m1[s[i]]++;

      }

      int ret = n;

      map <char, int> m2;

      for(int i = 0; i < t.size(); i++){

         m2[t[i]]++;

      }

      map <char, int> :: iterator it = m1.begin();

      while(it != m1.end()){

         //cout << it->first << " " << it->second << " " << m2[it->first] << endl;

         int x = min(it->second, m2[it->first]);

         ret -= x;

         it++;

      }

      return ret;

   }

};

main(){

   Solution ob;

   cout << (ob.minSteps("yxy", "xyx"));

}

输入项

"yxy"

"xyx"

输出结果

1

以上是 在C ++中制作两个字符串字谜的最小步骤数 的全部内容, 来源链接: utcz.com/z/338554.html

回到顶部