Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนขั้นต่ำของการจัดการที่จำเป็นในการสร้างสองสายอักขระ Anagram โดยไม่ต้องลบอักขระใน C ++


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