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
廣告