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

दिए गए पावर वाला सब-स्ट्रिंग ढूंढें C++ में


इस समस्या में, हमें एक स्ट्रिंग str और एक पूर्णांक pow दिया गया है। हमारा कार्य दिए गए पावर वाला एक सब-स्ट्रिंग ढूंढना है।

हमें वह सबस्ट्रिंग लौटानी होगी जिसका पावर pow के बराबर हो।

स्ट्रिंग का पावर उसके वर्णों के पावर का योग है।

वर्ण का पावर: a → 1, b → 2, c → 3, ...

उदाहरण से समझते हैं:

इनपुट: स्ट्रिंग = "programming" पावर = 49 आउटपुट: 'pro'

व्याख्या:

मैट्रिक्स का पावर: pro, पावर(p) = 16 पावर(r) = 18 पावर(o) = 15 कुल = 16 + 18 + 15 = 49

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

समस्या का एक सरल समाधान नेस्टेड लूप का उपयोग करना है। हम स्ट्रिंग के माध्यम से लूप करेंगे और एक आंतरिक लूप का उपयोग करके सबस्ट्रिंग ढूंढेंगे। प्रत्येक सबस्ट्रिंग के लिए, हम पावर की गणना करेंगे। और फिर जांचेंगे कि क्या यह 'pow' के बराबर है, यदि हां तो true लौटाएं, अन्यथा false लौटाएं।

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

एल्गोरिथम

  • चरण 1 - स्ट्रिंग को ट्रैवर्स करें और पावर (currPow) ज्ञात करें।

  • चरण 2 - जांचें कि मान (currPow - pow) मैप में मौजूद है या नहीं।

    • चरण 2.1 - यदि हां, तो प्रिंट करें -> सबस्ट्रिंग।

  • चरण 3 - currPow का मान मैप में डालें।

  • चरण 4 - यदि स्ट्रिंग के सभी वर्ण ट्रैवर्स हो जाते हैं, तो प्रिंट करें -> 'संभव नहीं'।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

#include <bits/stdc++.h> using namespace std; void findSubStringWithPower(string str, int power) { int i; unordered_map<int , int > powerSS; int currPower = 0; int N = str.length(); for (i = 0; i < N; i++) { currPower = currPower + (str[i] - 'a' + 1); if (currPower == power) { cout<<"Substring : "<<str.substr((0), i+1)<<" has power "<<power; return; } if (powerSS.find(currPower - power) != powerSS.end()) { cout<<"Substring from index "<<str.substr((powerSS[currPower-power] + 1),(i - (powerSS[currPower - power] + 1)) + 1); cout<<" has power "<<power; return; } powerSS[currPower] = i; } cout<<"No substring found!"; } int main() { string str = "programming"; int power = 49; findSubStringWithPower(str, power); return 0; }

आउटपुट

Substring : pro has power 49

  1. संतुलित BST में दिए गए योग वाली जोड़ी खोजें C++ में संतुलित BST में दिए गए योग वाली जोड़ी खोजें C++ में

    मान लीजिए हमारे पास एक संतुलित बाइनरी सर्च ट्री (BST) और एक लक्ष्य योग है, हमें एक ऐसी विधि परिभाषित करनी है जो जांचे कि क्या इसमें कोई ऐसी जोड़ी मौजूद है जिसका योग लक्ष्य योग के बराबर हो। ध्यान रखें कि बाइनरी सर्च ट्री अपरिवर्तनीय (immutable) है। उदाहरण के लिए, यदि इनपुट इस तरह का है: तो आउटपुट हो

  1. - C++ में दिए गए अंतर वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n विभिन्न तत्व हैं। हमें सरणी से एक जोड़ी (x, y) ढूंढनी है जिससे x और y का अंतर दिए गए अंतर d के बराबर हो। उदाहरण के लिए, यदि सरणी A = [10, 15, 26, 30, 40, 70] है और दिया गया अंतर 30 है, तो जोड़ियां (10, 40) और (30, 70) होंगी। हल दृष्टिकोण इस समस्या को हल करन

  1. - C++ में दिए गए GCD और LCM के साथ कोई भी पेयर खोजें

    इस सेक्शन में हम देखेंगे कि दिए गए GCD और LCM मानों का उपयोग करके नंबर पेयर्स की संख्या कैसे प्राप्त करें। मान लीजिए GCD और LCM मान 2 और 12 हैं। अब नंबरों के संभावित पेयर्स हैं (2, 12), (4, 6), (6, 4) और (12, 2)। इसलिए हमारा प्रोग्राम पेयर्स की संख्या ढूंढेगा। वह 4 है।आइए एल्गोरिदम देखें कि इस समस्य