ধরুন আমাদের স্ট্রিং হিসাবে s আছে, আমাদের অভিধানিক ক্রমে s এর শেষ সাবস্ট্রিংটি খুঁজে বের করতে হবে।
সুতরাং, ইনপুট যদি "abbbcabbc" এর মত হয়, তাহলে আউটপুট হবে "cabbc"
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
i :=0,j :=1,k :=0
-
যখন j + k
-
যদি s[i + k] s[j + k] এর মত হয়, তাহলে −
-
(k 1 দ্বারা বাড়ান)
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
যদি s[i + k]
-
i :=j
-
(j 1 দ্বারা বাড়ান)
-
-
অন্যথায়
-
j :=j + k + 1
-
-
k :=0
-
সূচী i থেকে শেষ পর্যন্ত s এর সাবস্ট্রিং ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: string lastSubstring(string s) { int i = 0; int j = 1; int k = 0; while(j + k < s.size()){ if(s[i + k] == s[j + k]) { k++; continue; } if(s[i + k] < s[j + k]){ i = j; j++; }else{ j = j + k + 1; } k = 0; } return s.substr(i, s.size() - i); } }; main(){ Solution ob; cout << (ob.lastSubstring("abbbcabbc")); }
ইনপুট
"abbbcabbc"
আউটপুট
cabbc