ধরুন আমাদের স্ট্রিং এর একটি তালিকা আছে; আমাদের তাদের মধ্যে দীর্ঘতম অস্বাভাবিক অনুবর্তন খুঁজে বের করতে হবে। দীর্ঘতম অস্বাভাবিক অনুসৃতিটি আসলে এই স্ট্রিংগুলির একটির দীর্ঘতম অনুসৃতি এবং এই পরবর্তীটি অন্যান্য স্ট্রিংগুলির কোনও অনুবর্তিত হওয়া উচিত নয়৷
আমরা জানি যে একটি অনুক্রম হল একটি ক্রম যা অবশিষ্ট উপাদানগুলির ক্রম পরিবর্তন না করে কিছু অক্ষর মুছে ফেলার মাধ্যমে একটি ক্রম থেকে উদ্ভূত হতে পারে৷
এখানে আমরা স্ট্রিংগুলির একটি তালিকা নেব, এবং আউটপুটটি দীর্ঘতম অস্বাভাবিক পরবর্তী দৈর্ঘ্যের হওয়া দরকার। যদি কোন দীর্ঘতম অস্বাভাবিক অনুক্রম না থাকে, তাহলে -1 ফেরত দিন।
সুতরাং, ইনপুট যদি "aba", "cdc", "eae" এর মত হয়, তাহলে আউটপুট হবে 3
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন isSubsequence() সংজ্ঞায়িত করুন, এটি a, b,
লাগবে -
j :=0
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি j
-
(j 1 দ্বারা বাড়ান)
-
-
-
সত্য প্রত্যাবর্তন যখন b এর আকার j
এর মতো হয় -
একটি ফাংশন সংজ্ঞায়িত করুন getDuplicates(), এটি একটি অ্যারে স্ট্রার্স নেবে,
-
একটি সেট পরিদর্শন এবং অন্য সেট রিট সংজ্ঞায়িত করুন
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি strs[i] পরিদর্শন করা হয়, তাহলে -
-
ret-এ strs[i] ঢোকান
-
-
পরিদর্শন করা
-এ strs[i] সন্নিবেশ করান
-
-
রিটার্ন রিটার্ন
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
স্ট্রিং দৈর্ঘ্যের উপর ভিত্তি করে অ্যারে স্ট্রগুলি সাজান
-
একটি সেট সদৃশ সংজ্ঞায়িত করুন :=getDuplicates(strs)
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি strs[i] ডুপ্লিকেট হয়, তাহলে −
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
যদি আমি 0 এর সমান হয়, তাহলে −
-
strs[i]
এর রিটার্ন সাইজ
-
-
j শুরু করার জন্য :=0, যখন j করুন
-
যদি isSubsequence(strs[j], strs[i]) মিথ্যা হয়, তাহলে −
-
j যদি i - 1 এর মত হয়, তাহলে −
-
strs[i]
এর রিটার্ন সাইজ
-
-
-
অন্যথায়
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
-
রিটার্ন -1
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(string a, string b){
return a.size() > b.size();
}
int findLUSlength(vector<string>& strs){
sort(strs.begin(), strs.end(), cmp);
set<string> duplicates = getDuplicates(strs);
for (int i = 0; i < strs.size(); i++) {
if (duplicates.count(strs[i]))
continue;
if (i == 0)
return strs[i].size();
for (int j = 0; j < i; j++) {
if (!isSubsequence(strs[j], strs[i])) {
if ((j == i - 1)) {
cout << i << endl;
return strs[i].size();
}
}
else
break;
}
}
return -1;
}
bool isSubsequence(string a, string b){
int j = 0;
for (int i = 0; i < a.size(); i++) {
if (j < b.size() && a[i] == b[j])
j++;
}
return j == b.size();
}
set<string> getDuplicates(vector<string>& strs){
set<string> visited;
set<string> ret;
for (int i = 0; i < strs.size(); i++) {
if (visited.count(strs[i])) {
ret.insert(strs[i]);
}
visited.insert(strs[i]);
}
return ret;
}
};
main(){
Solution ob;
vector<string> v = {"aba", "cdc", "eae"};
cout << (ob.findLUSlength(v));
} ইনপুট
{"aba", "cdc", "eae"} আউটপুট
3