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

C++-এ ক্যারেক্টার অ্যারে থেকে বৈধ শব্দগুলো প্রিন্ট করুন (Trie ব্যবহার করে)

একটি শব্দের সেট এবং একটি ক্যারেক্টার অ্যারে দেওয়া আছে। শব্দগুলো ক্যারেক্টার অ্যারের অক্ষরগুলো ব্যবহার করে তৈরি করা সম্ভব কিনা তা যাচাই করতে হবে।

উদাহরণ: words[] = {"go", "hi", "run", "on", "hog", "gone"}, Char[] = {'a', 'o', 'h', 'g'}। আউটপুট: go, hog।

Trie ডেটা স্ট্রাকচার ব্যবহার

সব শব্দ Trie-তে সংরক্ষণ করে, তারপর ক্যারেক্টার অ্যারের অক্ষর অনুযায়ী Trie-তে সার্চ করে বৈধ শব্দগুলো বের করা হয়।

উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;

#define char_int(c) ((int)c - (int)'a')
#define int_to_char(c) ((char)c + (char)'a')

struct TrieNode {
    TrieNode *Child[26];
    bool leaf;
};

TrieNode *getNode() {
    TrieNode *newNode = new TrieNode;
    newNode->leaf = false;
    for (int i = 0; i < 26; i++) newNode->Child[i] = NULL;
    return newNode;
}

void insertnode(TrieNode *root, char *Key) {
    int n = strlen(Key);
    TrieNode *pChild = root;
    for (int i = 0; i < n; i++) {
        int index = char_int(Key[i]);
        if (pChild->Child[index] == NULL)
            pChild->Child[index] = getNode();
        pChild = pChild->Child[index];
    }
    pChild->leaf = true;
}

void vaidword(TrieNode *root, bool Hash[], string str) {
    if (root->leaf == true)
        cout << str << "\t";
    for (int K = 0; K < 26; K++) {
        if (Hash[K] == true && root->Child[K] != NULL) {
            char c = int_to_char(K);
            vaidword(root->Child[K], Hash, str + c);
        }
    }
}

void PrintAllWords(char Arr[], TrieNode *root, int n) {
    bool Hash[26] = {false};
    for (int i = 0; i < n; i++)
        Hash[char_int(Arr[i])] = true;
    TrieNode *pChild = root;
    string str = "";
    for (int i = 0; i < 26; i++) {
        if (Hash[i] == true && pChild->Child[i]) {
            str = str + (char)int_to_char(i);
            vaidword(pChild->Child[i], Hash, str);
            str = "";
        }
    }
}

int main() {
    char Dict[][20] = {"go", "hi", "run", "on", "hog", "gone"};
    TrieNode *root = getNode();
    int n = sizeof(Dict)/sizeof(Dict[0]);
    for (int i = 0; i < n; i++)
        insertnode(root, Dict[i]);
    char arr[] = {'a', 'o', 'g', 'h'};
    int N = sizeof(arr)/sizeof(arr[0]);
    cout << "The words which are valid\t";
    PrintAllWords(arr, root, N);
    return 0;
}
আউটপুট
The words which are valid go hog
  1. C++-এ লিফ নোড থেকে দূরত্ব k-এ থাকা সব নোড প্রিন্ট করা

  2. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা

  3. C++ STL ব্যবহার করে অ্যারের সব রিভার্স পারমুটেশন (All Reverse Permutations)

  4. পাইথনে দেওয়া ক্যারেক্টারগুলো থেকে সম্ভাব্য শব্দগুলো প্রিন্ট করা