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

C++ में दी गई सूची में प्रत्येक शब्द के लिए सबसे छोटा अद्वितीय उपसर्ग खोजें

इस समस्या में, हमें arr[] शब्दों की एक सरणी दी गई है। हमारा काम दी गई सूची में प्रत्येक शब्द के लिए सबसे छोटा अद्वितीय उपसर्ग खोजना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

arr[] = {“learn”, “programming”, “code”}

आउटपुट

c leap lear p

समाधान दृष्टिकोण

समस्या का एक सरल समाधान शब्द के सभी उपसर्गों को ढूंढ़ना है। और फिर जांचें कि क्या यह सरणी में किसी अन्य शब्द का उपसर्ग है। अगर ऐसा नहीं है, तो इसे प्रिंट करें।

एक कुशल दृष्टिकोण ट्राई डेटा संरचना का उपयोग करना है। हम एक ट्राई का निर्माण करेंगे और सभी शब्दों को स्टोर करेंगे। फिर सम्मिलित करते समय प्रत्येक शब्द के लिए जाने की आवृत्ति का पता लगाएं। शब्दों का उपयोग करके, हम इसके रूट का पता लगाएंगे जो कि उपसर्ग है। हम नोड से शुरू होने वाले सभी उपसर्गों को आवृत्ति 1 के साथ प्रिंट करेंगे।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;
#define MAX 256
struct trieNode {
   struct trieNode *child[MAX];
   int freq;
};
struct trieNode *newTrieNode(void){
   struct trieNode *newNode = new trieNode;
   newNode->freq = 1;
   for (int i = 0; i<MAX; i++)
      newNode->child[i] = NULL;
   return newNode;
}
void insert(struct trieNode *root, string str) {
   int len = str.length();
   struct trieNode *pCrawl = root;
   for (int level = 0; level<len; level++) {
      int index = str[level];
      if (!pCrawl->child[index])
         pCrawl->child[index] = newTrieNode();
      else
         (pCrawl->child[index]->freq)++;
      pCrawl = pCrawl->child[index];
   }
}
void findShortestUniquePrefixRec(struct trieNode *root, char prefixChar[], int ind) {
   if (root == NULL)
      return;
   if (root->freq == 1) {
      prefixChar[ind] = '\0';
      cout<<prefixChar<<endl;
      return;
   }
   for (int i=0; i<MAX; i++) {
      if (root->child[i] != NULL) {
         prefixChar[ind] = i;
         findShortestUniquePrefixRec(root->child[i], prefixChar, ind+1);
      }
   }
}
void findShortestUniquePrefix(string arr[], int n) {
   struct trieNode *root = newTrieNode();
   root->freq = 0;
   for (int i = 0; i<n; i++)
      insert(root, arr[i]);
   char prefixChar[250];
   findShortestUniquePrefixRec(root, prefixChar, 0);
}
int main() {
   string arr[] = {"learn", "programming", "code", "leap"};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"All Shortest unique prefix for every words in a given list are : \n";
   findShortestUniquePrefix(arr, n);
   return 0;
}

आउटपुट

All Shortest unique prefix for every words in a given list are −
c
leap
lear
p
. है
  1. C++ में दी गई लिंक्ड सूची के पहले k नोड्स का गुणनफल खोजें

    विचार करें कि हमारे पास एक लिंक्ड सूची में कुछ तत्व हैं। हमें तत्वों की पहली k संख्या का गुणन परिणाम ज्ञात करना है। k का मान भी दिया गया है। तो अगर सूची [5, 7, 3, 5, 6, 9] और के =3 जैसी है, तो परिणाम 5 * 7 * 3 =105 होगा। प्रक्रियाएं सीधे आगे हैं। हम केवल बाईं ओर से शुरू होने वाले वर्तमान तत्व को पढ

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

    यहां हम देखेंगे कि किसी सरणी में प्रत्येक तत्व के लिए निकटतम मान कैसे प्राप्त करें। यदि किसी तत्व x में अगला तत्व है जो उससे बड़ा है, और सरणी में भी मौजूद है, तो वह उस तत्व का अधिक मूल्य होगा। यदि तत्व मौजूद नहीं है, तो -1 लौटाएं। मान लीजिए कि सरणी तत्व [10, 5, 11, 6, 20, 12] हैं, तो बड़े तत्व [11,

  1. सी ++ प्रोग्राम किसी दिए गए उपसर्ग अभिव्यक्ति के लिए एक अभिव्यक्ति वृक्ष का निर्माण करने के लिए

    एक्सप्रेशन ट्री मूल रूप से एक बाइनरी ट्री है जिसका उपयोग एक्सप्रेशन को दर्शाने के लिए किया जाता है। एक्सप्रेशन ट्री में, आंतरिक नोड्स ऑपरेटरों के अनुरूप होते हैं और प्रत्येक लीफ नोड ऑपरेंड के अनुरूप होते हैं। इन-ऑर्डर, प्री-ऑर्डर और पोस्ट-ऑर्डर ट्रैवर्सल में एक्सप्रेशन एक्सप्रेशन के लिए एक्सप्रेशन ट