ধরুন আমাদের কয়েকটি শব্দসহ একটি স্ট্রিং আছে। আমাদের স্ট্রিং-এ শব্দ들의 পজিশন রিভার্স করতে হবে। ইনপুট স্ট্রিং “The quick brown fox jumps over a lazy dog” হলে
সমাধানের ধাপগুলো:
getString() ফাংশন ডিফাইন করুন, এটি s ইনপুট নেবে, এটি নিচের মতো কাজ করে −
i := 0, j := s-এর সাইজ – 1
যখন s[i] == ' ' এবং i < s-এর সাইজ, i ১ বাড়ান
যখন j >= 0 এবং s[j] == ' ', j ১ কমান
ret := খালি স্ট্রিং
i <= j পর্যন্ত i ১ বাড়িয়ে লুপ চালান
যদি ret-এর সাইজ নন-জিরো এবং ret-এর লাস্ট এলিমেন্ট ' ' এবং s[i] ' ' হয়, তবে পরবর্তী ইটারেশনে যান
ret := ret + s[i]
reverseWords() মেথড ডিফাইন করুন, এটি s ইনপুট নেবে
j := 0
i = 0 থেকে s-এর সাইজ – 1 পর্যন্ত লুপ, প্রতিটি স্টেপে i := j সেট করুন
যদি s[i] ব্ল্যাঙ্ক হয়, তবে j := i + 1
অন্যথায়
যখন j + 1 < s-এর সাইজ এবং s[j + 1] স্পেস নয়, j ১ বাড়ান
x := i, y := j
যখন x < y
s[x] এবং s[y] এক্সচেঞ্জ করুন, x ১ বাড়ান, y ১ কমান
j ১ বাড়ান
মেইন মেথড থেকে:
স্ট্রিং s রিভার্স করুন
reverseWords(s) কল করুন
getString(s) রিটার্ন করুন
উদাহরণ (C++)
নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −
#include <bits/stdc++.h> using namespace std; class Solution { public: string reverseWords(string s) { reverse(s.begin(), s.end()); reverseWordss(s); return getString(s); } string getString(string s){ int i = 0; int j = s.size() - 1; while(s[i] == ' ' && i < s.size()) i++; while(j >= 0 && s[j] == ' ') j--; string ret = ""; for(;i <= j; i++){ if(ret.size() && ret.back() == ' ' && s[i] == ' ')continue; ret += s[i]; } return ret; } void reverseWordss(string& s){ int j = 0; for(int i = 0; i < s.size() ;i = j){ if(s[i] == ' '){ j = i + 1; } else{ while(j + 1 < s.size() && s[j + 1] != ' ') j++; int x = i; int y = j; while(x < y){ swap(s[x], s[y]); x++; y--; } j++; } } } }; main(){ Solution ob; cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog")); }
ইনপুট
"The quick brown fox jumps over a lazy dog"
আউটপুট
"dog lazy a over jumps fox brown quick The"