C++中將兩個字串轉換為異位詞所需的最少操作次數


假設我們有兩個長度相等的字串,我們必須找到將兩個字串轉換為異位詞所需的最少更改次數,且不刪除任何字元。異位詞是指具有相同字元集的兩個字串。例如,兩個字串是“HELLO”和“WORLD”,在這種情況下,所需的更改次數為3,因為三個字元不同。

這個想法很簡單,我們必須找到第一個字串中每個字元的頻率,然後遍歷第二個字串,如果第二個字串中的字元出現在頻率陣列中,則減少頻率值。如果頻率值小於0,則將最終計數增加1。

示例

 線上演示

#include <iostream>
using namespace std;
int countAlteration(string str1, string str2) {
   int count = 0;
   int frequency[26];
   for (int i = 0; i < 26; i++){
      frequency[i] = 0;
   }
   for (int i = 0; i < str1.length(); i++)
   frequency[str1[i] - 'A']++;
   for (int i = 0; i < str2.length(); i++){
      frequency[str2[i] - 'A']--;
      if (frequency[str2[i] - 'A'] < 0)
      count++;
   }
   return count;
}
int main() {
   string s1 = "HELLO", s2 = "WORLD";
   cout << "Number of required alteration: " << countAlteration(s1, s2);
}

輸出

Number of required alteration: 3

更新於:2019年10月21日

411 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告