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 次瀏覽

啟動你的職業生涯

完成課程獲得認證

立即開始
廣告