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

พิมพ์คู่ของแอนนาแกรมทั้งหมดในอาร์เรย์ของสตริงที่กำหนดใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ของสตริงและเราต้องพิมพ์คู่ของแอนนาแกรมของอาร์เรย์ที่กำหนด

แอนนาแกรม เป็นสตริงที่เกิดขึ้นจากการจัดเรียงอักขระของสตริงอื่น ชอบ - สวัสดีและ lolhe

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน −

Input: array = {“hello”, “hrdef”, “from”, “lohel”, “morf”}.
Output: [hello, lohel] , [from , morf]

เพื่อแก้ปัญหานี้ เราจะใช้การซ้อนลูป เราต้องการสองลูปที่ซ้อนกัน วงนอกจะข้ามอาร์เรย์และเลือกองค์ประกอบ ลูปที่ซ้อนกันจะตรวจสอบแต่ละสตริงและตรวจสอบว่าเป็นแอนนาแกรมหรือไม่

ตัวอย่าง

มาดูโปรแกรมที่จะใช้อัลกอริทึมนั้นกัน −

#include <iostream>
using namespace std;
#define NO_OF_CHARS 256
bool isAnagramString(string str1, string str2){
   int count[NO_OF_CHARS] = {0};
   int i;
   for (i = 0; str1[i] && str2[i]; i++){
      count[str1[i]]++;
      count[str2[i]]--;
   }
   if (str1[i] || str2[i])
      return false;
   for (i = 0; i < NO_OF_CHARS; i++)
      if (count[i])
         return false;
      return true;
}
void printAnagrams(string arr[], int n){
   for (int i = 0; i < n; i++)
      for (int j = i+1; j < n; j++)
         if (isAnagramString(arr[i], arr[j]))
            cout<<arr[i]<<" and "<<arr[j]<<" are anagrams.\n";
}
int main(){
   string arr[] = {"hello", "hrdef", "from", "lohel", "morf"};
   int n = sizeof(arr)/sizeof(arr[0]);
   printAnagrams(arr, n);
   return 0;
}

ผลลัพธ์

hello and lohel are anagrams.
from and morf are anagrams.

วิธีแก้ปัญหานี้ค่อนข้างเข้าใจง่ายแต่มีประสิทธิภาพน้อยกว่า ดังนั้นจึงอาจมีการเพิ่มประสิทธิภาพบางอย่างที่สามารถทำได้กับโซลูชันของเราเพื่อให้มีประสิทธิภาพมากขึ้น เราสามารถทำได้โดยการจัดเรียงอาร์เรย์ของเราที่มีสตริง อาร์เรย์ที่จัดเรียงนี้จะทำให้แอนนาแกรมค้นหาได้ง่ายขึ้น