কম্পিউটার টিউটোরিয়াল

C++-এ স্ট্রিং অ্যারে থেকে সব অ্যানাগ্রাম জোড়া প্রিন্ট করা

এই সমস্যায় একটি স্ট্রিং অ্যারে দেওয়া আছে। আমাদের দিয়ে गये অ্যারেতে থেকে সব অ্যানাগ্রাম জোড়া প্রিন্ট করতে হবে।

অ্যানাগ্রাম হলো যেসব স্ট্রিং যেগুলো অন্য একটি স্ট্রিংর ক্যারেক্টার রি-অ্যারেঞ্জ করে তৈরি হয়। যেমন - hello এবং lolhe।

উদাহরণ

ইনপুট: array = {"hello", "hrdef", "from", "lohel", "morf"}
আউটপুট: [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.

এই সমাধানটি বুঝতে সহজ কিন্তু কম কার্যকর। এর কিছু অপ্টিমাইজেশন করা যেতে পারে। আমরা স্ট্রিং ধারণকারী অ্যারেটি সর্ট করতে পারি। সর্ট করা অ্যারে অ্যানাগ্রাম খুঁজে বের করা সহজ করে দেবে।

  1. নির্দিষ্ট যোগফল দিয়ে সব পেয়ার প্রিন্ট করা C++-তে

  2. স্ট্রিংয়ের সব প্যালিনড্রোম পারমুটেশন প্রিন্ট করা C++-তে

  3. স্ট্রিং-এর সকল সাবস্ট্রিং প্রিন্ট (C++)

  4. C++-এ স্ট্রিং অ্যারে: string কীওয়ার্ড ব্যবহার