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

พิมพ์คำที่ถูกต้องทั้งหมดที่เป็นไปได้โดยใช้ Characters of Array ใน C++


สำหรับปัญหานี้ เราได้รับชุดคำและอาร์เรย์ของอักขระ และเราต้องตรวจสอบว่าคำนั้นเป็นไปได้โดยใช้อักขระในอาร์เรย์หรือไม่

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

Input : words[] : {‘go’ , ‘hi’ , ‘run’ , ‘on’ , ‘hog’ , ‘gone’}
   Char[] : {‘a’ , ‘o’ , ‘h’ , ‘g’}
Output : go , hog.

คำอธิบาย − คำที่ประกอบด้วยอักขระที่กำหนดคือ - go, hog และ rest ไม่รวมอักขระใน char array

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

ตัวอย่าง

#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];
   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