मान लीजिए कि हमारे पास एक स्ट्रिंग एस और शब्दों का एक शब्दकोष है, शब्दों की संख्या ज्ञात करें [i] जो एस के बाद है। इसलिए यदि इनपुट एस ="एबीसीडीई" है और शब्दकोश ["ए", "बीबी" है, "एसीडी", "एसी"], तो आउटपुट 3 होगा। क्योंकि शब्दकोश में शब्दों के तीन अनुक्रम हैं, जो एस के बाद हैं:"ए" "एसीडी" और "ऐस"
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=शब्द सरणी का आकार
- एक नक्शा बनाएं मी
- i के लिए 0 से लेकर शब्दों के आकार तक
- मानचित्र में शब्द[i] डालें m[words[i, 0]] स्थिति
- उत्तर:=0
- i के लिए 0 से S के आकार के बीच
- चार x :=एस[i]
- यदि x मानचित्र m में मौजूद है, तो
- अस्थायी:=m[x], और m[x] हटाएं
- जे के लिए 0 से अस्थायी आकार में
- यदि अस्थायी का आकार [j] =1 है, तो ans को 1 से बढ़ाएँ, अन्यथा अस्थायी [j] के सबस्ट्रिंग को सूचकांक 1 से m[temp[j, 1]] में डालें।
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int numMatchingSubseq(string S, vector<string>& words) { int n = words.size(); map <char, vector <string> > m; for(int i = 0; i < words.size(); i++){ m[words[i][0]].push_back(words[i]); } int ans = 0; for(int i = 0; i < S.size(); i++){ char x = S[i]; if(m.find(x) != m.end()){ vector <string> temp = m[x]; m.erase(x); for(int j = 0; j < temp.size(); j++){ if(temp[j].size() == 1){ ans++; } else { m[temp[j][1]].push_back(temp[j].substr(1)); } } } } return ans; } }; int main() { Solution ob1; string s = "abcde"; vector<string> v{"a","bb","acd","ace"}; cout << ob1.numMatchingSubseq(s, v) << endl; return 0; }
इनपुट
"abcde" ["a","bb","acd","ace"] string s = "abcde"; vector<string> v{"a","bb","acd","ace"};
आउटपुट
3