একটি স্ট্রিং s দেওয়া আছে। এর সব সাবস্ট্রিংয়ের মধ্যে লেক্সিকোগ্রাফিক্যালি সর্বশেষ (সর্বোচ্চ) সাবস্ট্রিংটি বের করতে হবে।
উদাহরণ
ইনপুট: "abbbcabbc" → আউটপুট: "cabbc"
সমাধানের পদ্ধতি (Two Pointer Approach)
- দুটি পয়েন্টার
iএবংjদিয়ে সাবস্ট্রিং তুলনা করুন। kদিয়ে মিলিত প্রিফিক্স দৈর্ঘ্য ট্র্যাক করুন।s[i+k] == s[j+k]হলেk++।s[i+k] < s[j+k]হলেi = j, j++।- অন্যথায়
j = j + k + 1। k = 0রিসেট করুন।- শেষে
s.substr(i)রিটার্ন করুন।
সময় জটিলতা: O(n)।
প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string lastSubstring(string s) {
int i = 0, j = 1, 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);
}
};
int main() {
Solution ob;
cout << (ob.lastSubstring("abbbcabbc"));
}
ইনপুট
"abbbcabbc"
আউটপুট
cabbc