ধরুন আমাদের স্ট্রিং s আছে, আমাদের প্রতিটি স্বরবর্ণ সমন্বিত দীর্ঘতম সাবস্ট্রিংয়ের আকার খুঁজে বের করতে হবে। অর্থাৎ, 'a', 'e', 'i', 'o', এবং 'u' কে জোড় সংখ্যায় দেখাতে হবে। সুতরাং স্ট্রিং যদি "হ্যালোওয়ার্ল্ড" এর মত হয়, তাহলে আউটপুট হবে 8।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret :=0, m এবং cnt দুটি মানচিত্র সংজ্ঞায়িত করুন, m[“00000”] সেট করুন :=-1
-
স্বরধ্বনিকে স্বরবর্ণ অ্যারেতে সংরক্ষণ করুন
-
i এর জন্য 0 থেকে s আকারের সীমার মধ্যে
-
x :=s[i], এবং ঠিক আছে :=মিথ্যা
-
cnt[x] 1 দ্বারা বাড়ান, temp সেট করুন :=খালি স্ট্রিং
-
0 থেকে 4 পরিসরে k-এর জন্য:temp :=temp + ‘0’ + cnt[vowels[k]] mod 2
-
যদি m এর temp থাকে, তাহলে ret :=ret এর সর্বোচ্চ এবং i – m[temp], অন্যথায় m[temp] :=i
-
-
রিটার্ন রিটার্ন
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: int findTheLongestSubstring(string s) { int ret = 0; map <string, int> m; map <char, int> cnt; m["00000"] = -1; char vowels[5] = {'a', 'e', 'i', 'o', 'u'}; for(int i = 0; i < s.size(); i++){ char x = s[i]; bool ok = false; cnt[x]++; string temp = ""; for(int k = 0; k < 5; k++){ temp+= ('0' + (cnt[vowels[k]] % 2)); } if(m.count(temp)){ ret = max(ret, i - m[temp]); } else{ m[temp] = i; } } return ret; } }; main(){ Solution ob; cout << (ob.findTheLongestSubstring("helloworld")); }
ইনপুট
“helloworld”
আউটপুট
8