Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में कैरेक्टर ऑफ़ ऐरे का उपयोग करके सभी मान्य शब्दों को प्रिंट करें


इस समस्या के कारण, हमें शब्दों का एक सेट और वर्णों की एक सरणी दी गई है और हमें यह जांचना है कि क्या सरणी के वर्णों का उपयोग करके शब्द संभव हैं।

आइए समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -

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

स्पष्टीकरण - शब्दों में से, जिन शब्दों में दिए गए वर्ण हैं, वे हैं - गो, हॉग और रेस्ट में वर्ण सरणी में वर्ण शामिल नहीं हैं।

इस समस्या को हल करने के लिए, हम ट्राई डेटा संरचना का उपयोग करेंगे। इस ट्राई में, हम सभी शब्दों को स्टोर करेंगे और फिर सरणी के अक्षरों के आधार पर शब्दों को ट्राई में खोजेंगे।

उदाहरण

#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

  1. C++ में लीफ नोड से k दूरी पर मौजूद सभी नोड्स को प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री और एक नंबर K दिया जाता है। हमें ट्री के सभी नोड्स को प्रिंट करना होता है जो लीफ नोड से k दूरी पर होते हैं। बाइनरी ट्री एक विशेष पेड़ है जिसके प्रत्येक नोड में अधिकतम दो नोड (एक/दो/कोई नहीं) होते हैं। लीफ नोड बाइनरी ट्री का नोड ट्री के अंत में होता है। इस समस्या

  1. सी ++ में एसटीएल का उपयोग कर सरणी के सभी रिवर्स क्रमपरिवर्तन?

    इस खंड में हम देखेंगे कि C++ में STL का उपयोग करके सभी रिवर्स क्रमपरिवर्तन कैसे उत्पन्न किए जाते हैं। कुछ संख्याओं जैसे (1, 2, 3) का आगे और पीछे क्रमपरिवर्तन नीचे जैसा होगा - आगे क्रमपरिवर्तन 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 उलट क्रमपरिवर्तन 3, 2, 1 3, 1, 2 2, 3, 1 2, 1, 3 1, 3, 2 1,

  1. दिए गए वर्णों का उपयोग करके संभावित शब्दों को प्रिंट करने के लिए पायथन प्रोग्राम

    इस ट्यूटोरियल में, हम दिए गए पात्रों के साथ सभी संभावित शब्द खोजने जा रहे हैं। आइए बेहतर समझ के लिए कुछ परीक्षण मामलों को देखें। Input: words = ["hi", "hello", "bye", "good"] characters = ["h", "i", "b", "y", "e&quo