विचार करें कि हमारे पास डिक्शनरी नामक स्ट्रिंग्स की एक सूची है। हमारे पास एक और पैटर्न स्ट्रिंग है। हमारा काम उन स्ट्रिंग्स को ढूंढना है जो पैटर्न से मेल खाती हैं। मान लीजिए कि शब्दकोश ["abb", "xyz", "aab", "kmm"] जैसा है, और पैटर्न "stt" है, तो परिणाम "abb", और "kmm" होंगे। चूंकि पैटर्न में पहले एक अक्षर होता है, फिर दो समान अक्षर होते हैं, इसलिए यह समान पैटर्न स्ट्रिंग्स का अनुसरण करेगा।
इस समस्या को हल करने के लिए, हम पैटर्न को इस तरह से एन्कोड करेंगे कि डिक्शनरी से कोई भी शब्द, जो पैटर्न से मेल खाता हो, में एन्कोडिंग के बाद पैटर्न जैसा ही हैश होगा। हम शब्दकोश में सभी शब्दों के माध्यम से पुनरावृति करेंगे और उन्हें प्रदर्शित करेंगे जहां हैश समान है।
उदाहरण
#include<iostream> #include<unordered_map> #include<unordered_set> using namespace std; string stringEncode(string str) { unordered_map<char, int> map; string encoded_str = ""; int i = 0; for (char ch : str) { if (map.find(ch) == map.end()) map[ch] = i++; encoded_str += to_string(map[ch]); } return encoded_str; } void matchedPattern(unordered_set<string> dict, string pattern) { int patt_len = pattern.length(); string hash = stringEncode(pattern); for (string word : dict) { if (word.length() == patt_len && stringEncode(word) == hash) cout << word << " "; } } int main() { unordered_set<string> dict = {"abb", "xyz", "aab", "kmm"}; string pattern = "stt"; matchedPattern(dict, pattern); }
आउटपुट
kmm abb