สมมติว่าเรามีสตริงสองสายที่มีความยาวเท่ากัน เราต้องหาจำนวนการเปลี่ยนแปลงขั้นต่ำที่จำเป็นในการสร้างแอนนาแกรมสองสตริง โดยไม่ลบอักขระใดๆ แอนนาแกรมเป็นสองสตริงที่มีชุดอักขระเหมือนกัน สมมติว่าสตริงสองสตริงคือ "HELLO" และ "WORLD" ในที่นี้ จำนวนการเปลี่ยนแปลงที่จำเป็นคือ 3 เนื่องจากอักขระ 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