मान लीजिए हमारे पास लोअरकेस अक्षरों की एक स्ट्रिंग S है, और एक पूर्णांक सरणी shifts है। एक अक्षर का शिफ्ट का मतलब वर्णमाला में अगला अक्षर है, z के लिए, यह a होगा। अब प्रत्येक shifts[i] = x के लिए, हम S के पहले i+1 अक्षरों को x बार शिफ्ट करना चाहते हैं। हमें S पर ऐसे सभी शिफ्ट लागू करने के बाद अंतिम स्ट्रिंग ढूंढनी है। तो यदि स्ट्रिंग "abc" है और shifts = [3,5,9], तो S के पहले 1 अक्षर को 3 से शिफ्ट करने के बाद, हमारे पास "dbc" होगा, S के पहले दो अक्षरों को 5 से शिफ्ट करने के बाद, हमारे पास "igc" होगा, और S के पहले 3 अक्षरों को 9 से शिफ्ट करने के बाद, हमारे पास "rpl" होगा, और यही उत्तर है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- i को शिफ्ट सरणी के आकार - 2 से 0 तक नीचे की ओर
- shift[i] := shift[i] + shift[i + 1]
- shift[i] := shift[i] mod 26
- i को 0 से S के आकार - 1 तक की रेंज में
- S[i] := ((S[i] - a का ASCII) + shifts[i] mod 26) + a का ASCII
- S लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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