मान लीजिए कि हमारे पास अलग-अलग शब्दों के साथ एक स्ट्रिंग है, उस स्ट्रिंग को वाक्य कहा जाता है, और यह निम्न प्रारूप में है -
-
पहला अक्षर अपर केस में है।
-
टेक्स्ट के प्रत्येक शब्द को एक स्पेस कैरेक्टर द्वारा अलग किया जाता है।
हमें टेक्स्ट में शब्दों को इस तरह से पुनर्व्यवस्थित करना है कि सभी शब्दों को उनकी लंबाई के बढ़ते क्रम में पुनर्व्यवस्थित किया जाए। यदि दो शब्दों की लंबाई समान है, तो उन्हें उनके मूल क्रम में व्यवस्थित करें।
फिर अंत में इन नियमों को लागू करके स्ट्रिंग वापस करें।
इसलिए, यदि इनपुट "I love to code in cpp" जैसा है, तो आउटपुट "I to in cpp love code" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
टेक्स्ट के पहले अक्षर को छोटे अक्षर में बनाएं
-
एक सरणी परिभाषित करें x :=स्पेस का उपयोग करके टेक्स्ट को विभाजित करने के बाद सभी शब्दों को रखें
-
जोड़े की एक सरणी परिभाषित करें
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
s के अंत में {x[i],i} डालें
-
-
सरणी को लंबाई के आधार पर क्रमबद्ध करें, यदि लंबाई समान उपयोग सूचकांक मान हैं
-
रिट:=खाली स्ट्रिंग
-
इनिशियलाइज़ i:=0 के लिए, जब i <साइज़ ऑफ़ s, अपडेट (i से 1 तक बढ़ाएँ), करें -
-
ret :=ret s[i]
. के पहले तत्व को संयोजित करता है -
यदि i, s के आकार के बराबर नहीं है, तो -
-
ret :=रिक्त स्थान के साथ ret concatenate
-
-
-
रिट टू कैपिटल का पहला अक्षर बनाएं
-
वापसी रिट
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: vector <string> split(string& s, char delimiter){ vector <string> tokens; string token; istringstream tokenStream(s); while(getline(tokenStream, token, delimiter)){ tokens.push_back(token); } return tokens; } static bool cmp(pair <string, int>& a, pair <string, int>& b){ if(a.first.size() != b.first.size()) return a.first.size() < b.first.size(); return a.second < b.second; } static bool a(string& a, string& b){ return a.size() < b.size(); } string arrangeWords(string text) { text[0] += 'a' - 'A'; vector<string> x = split(text, ' '); vector<pair<string, int> > s; for (int i = 0; i < x.size(); i++) s.push_back({ x[i], i }); sort(s.begin(), s.end(), cmp); string ret = ""; for (int i = 0; i < s.size(); i++) { ret += s[i].first; if (i != s.size() - 1) ret += ' '; } ret[0] += 'A' - 'a'; return ret; } }; main(){ Solution ob; cout << (ob.arrangeWords("I love to code in cpp")); }
इनपुट
"I love to code in cpp"
आउटपुट
I to in cpp love code