मान लीजिए कि हमारे पास लोअरकेस अक्षरों का एक स्ट्रिंग S है, और एक पूर्णांक सरणी शिफ्ट है। एक अक्षर की शिफ्ट का मतलब है वर्णमाला में अगला अक्षर, z के लिए, यह a होगा। अब प्रत्येक शिफ्ट [i] =x के लिए, हम S के पहले i+1 अक्षरों को x बार शिफ्ट करना चाहते हैं। S पर इस तरह के सभी बदलाव लागू होने के बाद हमें अंतिम स्ट्रिंग ढूंढनी होगी। इसलिए यदि स्ट्रिंग "abc" है और शिफ्ट =[3,5,9] है, तो S के पहले 1 अक्षर को 3 से शिफ्ट करने के बाद, "dbc" होगा, S के पहले दो अक्षरों को 5 से शिफ्ट करने पर, हमारे पास "igc" होगा। ”, और S के पहले 3 अक्षरों को 9 से स्थानांतरित करने पर, हमारे पास "rpl" होता है, और यह उत्तर है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- i के लिए शिफ्ट एरे के रेंज साइज में - 2 डाउन टू 0
- शिफ्ट[i] :=शिफ्ट[i] + शिफ्ट[i + 1]
- शिफ्ट[i] :=शिफ्ट[i] मॉड 26
- i के लिए 0 से S के आकार के लिए - 1
- S[i] :=((S[i] - ASCII of a) + शिफ्ट्स[i] मॉड 26) + ASCII of a
- वापसी एस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string shiftingLetters(string S, vector<int>& shifts) { for(int i = shifts.size() - 2 ;i >=0; i--){ shifts[i] += shifts[i + 1]; shifts[i] %= 26; } for(int i = 0; i < S.size(); i++) { S[i] = ( ((S[i] - 'a') + shifts[i]) % 26 + 'a'); } return S; } }; main(){ vector<int> v = {3,5,9}; Solution ob; cout << (ob.shiftingLetters("abc", v)); }
इनपुट
"abc" [3,5,9]
आउटपुट
rpl