কম্পিউটার টিউটোরিয়াল

C++-তে জোড় সংখ্যক স্বরবর্ণ ধারণকারী সবচেয়ে লম্বা সাবস্ট্রিং খুঁজে বের করা


মান লইয়া s স্ট্রিংটি, আমাদের প্রতিটি স্বরবর্ণ জোড় সংখ্যক বার থাকা সবচেয়ে লম্বা সাবস্ট্রিংর সাইজ খুঁজে বের করতে হবে। অর্থাৎ, 'a', 'e', 'i', 'o', এবং 'u' অবশ্যই জোড় সংখ্যক বার আওয়ার হবে। তাই যদি স্ট্রিংটি "helloworld" হয়, তবে আউটপুট হবে ৮।

এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব −

  • ret := 0, দুটি মэপ m এবং cnt ডিফাইন করো, m["00000"] := -1 সেট করো

  • স্বরবর্ণগুলো vowels অ্যারেতে স্টোর করো

  • i = 0 থেকে s-এর সাইজ পর্যন্ত লুপ চলাও

    • x := s[i], এবং ok := false

    • cnt[x]-কে ১ বাড়াও, temp := খালি স্ট্রিং সেট করো

    • k = 0 থেকে ৪ পর্যন্ত: temp := temp + '0' + cnt[vowels[k]] mod 2

    • যদি m-এ temp থাকে, তবে ret := max(ret, i - m[temp]), অন্যথায় m[temp] := i

  • ret রিটার্ন করো

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int findTheLongestSubstring(string s) {
        int ret = 0;
        map  m;
        map  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

  1. C++ প্রোগ্রাম: জোড় যোগফলের নন-এম্পটি সাবসেটের দৈর্ঘ্য

  2. স্ট্রিং-এ প্রথম সর্বোচ্চ দৈর্ঘ্যের জোড় আকারের ওয়ার্ড বের করা (C++)

  3. C++ ব্যবহার করে ডিজিটের যোগফল জোড় থাকা সংখ্যা বের করুন

  4. C++-এ Nth সম দৈর্ঘ্যের প্যালিনড্রোম সংখ্যা বের করা