C++ 中的最小字符串


假设我们有两个字符串 s 和 t 长度相同,且均为小写字母。考虑我们首先将 s 按任意顺序重新排列,然后统计将 s 变成 t 所需的最小更改次数。

因此,如果输入为 s = "eccynue",t = "science",则输出将为 2,因为如果我们将 "eccynue" 重新排列为 "yccence",再将 y 替换为 s,将第二个 c 替换为 i,它将变成 "science"。

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

  • 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

更新日期: 2020 年 9 月 2 日

977 次浏览

启动你的职业生涯

完成课程获得认证

立即开始
广告