मान लीजिए हमारे पास एक इनपुट स्ट्रिंग वाक्य है जहां प्रत्येक तत्व एकल वर्ण के रूप में संग्रहीत है, हमें स्ट्रिंग्स को शब्द दर शब्द उल्टा करना है।
इसलिए, यदि इनपुट ["t","h","e"," ","m","a","n"," ","i","s"," ","n","l","c","e"] जैसा है, तो आउटपुट ["n","i","c","e"," ","i","s"," ","m","a","n"," ","t","h","e"] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
सरणी s को रिवर्स करें
j := 0
n := s का आकार
i := 0 से आरंभ करें, जब i < n, अपडेट करें (i को 1 से बढ़ाएं), करें -
यदि s[i], ' ' के समान है, तो -
सरणी s को इंडेक्स j से i तक रिवर्स करें
j := i + 1
सरणी s को इंडेक्स j से n तक रिवर्स करें
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: void reverseWords(vector<char>& s) { reverse(s.begin(), s.end()); int j = 0; int n = s.size(); for(int i = 0; i < n; i++){ if(s[i] == ' '){ reverse(s.begin() + j, s.begin() + i); j = i + 1; } } reverse(s.begin() + j, s.begin() + n); } }; main(){ Solution ob; vector<char> v = {'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'}; ob.reverseWords(v); print_vector(v); } इनपुट
{'t','h','e',' ','m','a','n',' ','i','s',' ','n','i','c','e'} आउटपुट
[n, i, c, e, , i, s, , m, a, n, , t, h, e, ]