C ++中的最小字符串

假设我们有两个长度相同的字符串s和t,并且都用小写字母表示。考虑我们首先将s重新排列为任意顺序,然后计算将s转换为t所需的最小更改数。

因此,如果输入就像s =“ eccynue”,t =“ science”,那么输出将为2,就好像我们将“ eccynue”重新排列为“ yccence”一样,然后将y替换为s,将第二个c替换为i,它将是“科学”。

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

  • ret:= 0

  • 定义两个数组cnt1保持s的频率,定义cnt2保持t的频率

  • 对于初始化i:= 0,当i <26时,更新(将i增加1),执行-

    • ret:= ret + max(cnt1 [i]-cnt2 [i],0)

  • 返回ret

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

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(string s, string t) {
      int ret = 0;
      vector <int> cnt1(26);
      vector <int> cnt2(26);
      for(int i = 0; i < s.size(); i++){
         cnt1[s[i] - 'a']++;
      }
      for(int i = 0; i < t.size(); i++){
         cnt2[t[i] - 'a']++;
      }
      for(int i = 0; i < 26; i++){
         ret += max(cnt1[i] - cnt2[i], 0);
      }
      return ret;
   }
};
int main(){
   Solution ob;
   cout << (ob.solve("eccynue", "science"));
}

输入项

"eccynue", "science"

输出结果

2