इस समस्या में, हम दो स्ट्रिंग str1 और str2 हैं। हमारा काम यह जांचना है कि क्या str2 के सभी वर्ण और str1 में मौजूद हैं।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट -
str1 = “Hello” str2 = “Hell”
आउटपुट - हाँ
स्पष्टीकरण - str2 के सभी वर्ण str1 में मौजूद हैं।
इस समस्या को हल करने के लिए, एक सरल उपाय यह होगा कि str1 में str2 के प्रत्येक वर्ण की जाँच की जाए और फिर समाधान लौटाया जाए।
लेकिन हमें प्रभावी समाधान बनाने की जरूरत है। तो, हम एक आवृत्ति सरणी (सभी मान्य वर्णों के लिए लंबाई 256) का उपयोग करेंगे और फिर str1 को पार करेंगे और आवृत्ति सरणी में मान की तुलना में संबंधित वर्ण के आधार पर बढ़ाएंगे। फिर हम str2 को पार करेंगे, जो घटना पर आवृत्ति सरणी को कम कर देगा। और प्रत्येक पुनरावृत्ति पर, हम यह भी जांचेंगे कि क्या यह आवृत्ति ऋणात्मक हो गई है। अगर ऐसा है तो संभव नहीं है अन्यथा संभव है।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम
#include <iostream> #include <string.h> using namespace std; bool isPresent(string str1, string str2){ int freq[256] = { 0 }; for (int i = 0; i<str1.length(); i++) freq[str1[i]]++; for (int i=0;i<str2.length(); i++) { if (freq[str2[i]] < 1) return false; } return true; } int main() { string str1 = "tutorialspoint"; string str2 = "point"; cout<<"All charcters of '"<<str2<<"' are "; isPresent(str1,str2)?cout<<"present":cout<<"not present"; cout<<" in '"<<str1<<"' "; return 0; }
आउटपुट
All charcters of 'point' are present in 'tutorialspoint'