मान लीजिए कि हमारे पास एक स्ट्रिंग एस है, हम कुछ प्रतिस्थापन ऑपरेशन करेंगे जो अक्षरों के समूहों को नए के साथ बदल देंगे। प्रत्येक प्रतिस्थापन ऑपरेशन में 3 पैरामीटर होते हैं - एक प्रारंभिक सूचकांक i, एक स्रोत शब्द x और एक लक्ष्य शब्द y। अब नियम यह है कि यदि x मूल स्ट्रिंग S में स्थिति i से शुरू होता है, तो हम x की उस घटना को y से बदल देंगे। अन्यथा, हम कुछ नहीं करते।
तो एक उदाहरण के रूप में, विचार करें, यदि हमारे पास एस ="एबीसीडी" है और हमारे पास कुछ प्रतिस्थापन ऑपरेशन है i =2, x ="cd", y ="ffff", तो क्योंकि "सीडी" मूल स्ट्रिंग में स्थिति 2 से शुरू होता है एस, हमें इसे "ffff" से बदलना होगा।
आइए S ="abcd" पर एक और उदाहरण देखें, यदि हमारे पास दोनों प्रतिस्थापन ऑपरेशन i =0, x ="ab", y ="eee", साथ ही साथ एक अन्य प्रतिस्थापन ऑपरेशन i =2, x ="ec" है। , y ="ffff", यह दूसरा ऑपरेशन कुछ नहीं करता है क्योंकि मूल स्ट्रिंग S[2] ='c' में, जो x[0] ='e' से मेल नहीं खाता।
तो अगर हमारे पास एक स्ट्रिंग एस ="एबीसीडी", सूचकांक =[0,2] और स्रोत =["ए", "सीडी"], और लक्ष्य =["ईई", "एफएफएफएफ"] है, तो आउटपुट होगा "ईबफ्फ्फ"। ऐसा इसलिए है क्योंकि "ए" एस में स्थिति 0 से शुरू होता है, इसलिए इसे "ईई" से बदल दिया जाता है। अब "cd" S में इंडेक्स 2 से शुरू होता है, इसलिए इसे "ffff" से बदल दिया जाता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- जोड़ों की एक सरणी परिभाषित करें, जिसे क्रमबद्ध कहा जाता है, n:=अनुक्रमणिका सरणी का आकार
- मैं के लिए 0 से n - 1 की सीमा में
- एक जोड़ी (इंडेक्स[i], i) को सॉर्ट में डालें।
- क्रमबद्ध को उल्टे क्रम में क्रमित करें
- जे के लिए 0 से n - 1 की सीमा में
- i :=जोड़ी का पहला मान सॉर्ट किया गया[j]
- src :=स्रोत[सॉर्ट किए गए जोड़े का दूसरा मान[j]]
- लक्ष्य :=लक्ष्य[क्रमबद्ध जोड़ी का दूसरा मान[j]]
- यदि इंडेक्स i से S को सोर्स के साइज -1 में सबस्ट्रिंग सोर्स के समान है, तो
- S :=(सूचकांक 0 से i तक S का सबस्ट्रिंग) लक्ष्य को जोड़ना, जोड़ना (स्रोतों के आकार में I से S का स्थानापन्न करना – 1)
- वापसी एस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, vector<string>& targets) { vector < pair <int, int> > sorted; int n = indexes.size(); for(int i = 0; i < n; i++){ sorted.push_back({indexes[i], i}); } sort(sorted.rbegin(), sorted.rend()); for(int j = 0; j < n; j++){ int i = sorted[j].first; string source = sources[sorted[j].second]; string target = targets[sorted[j].second]; if(S.substr(i, source.size()) == source){ S = S.substr(0, i) + target + S.substr(i + source.size()); } } return S; } }; main(){ vector<int> v1 = {0, 2}; vector<string> v2 = {"a", "cd"}; vector<string> v3 = {"eee", "ffff"}; Solution ob; cout << (ob.findReplaceString("abcd", v1, v2, v3)); }
इनपुट
"abcd" [0, 2] ["a", "cd"] ["eee", "ffff"]
आउटपुट
eeebffff