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

C++-এ স্ট্রিং-এ বিশেষ প্যালিনড্রোম সাবস্ট্রিং গণনা


আমাদের একটি স্ট্রিং str দেওয়া আছে। লক্ষ্য হলো str-এর সব সাবস্ট্রিং যেগুলো বিশেষ প্যালিনড্রোম (special palindrome) এবং দৈর্ঘ্য ১ এর চেয়ে বড়, তাদের সংখ্যা বের করা। বিশেষ প্যালিনড্রোম হলো এমন স্ট্রিং যেগুলো або সব ক্যারেক্টর একই, অথবা শুধু মাঝপথের ক্যারেক্টর ভিন্ন। উদাহরণস্বরূপ, স্ট্রিং "baabaa" হলে বিশেষ প্যালিনড্রোম সাবস্ট্রিং গুলো: "aa", "aabaa", "aba", "aa"।

উদাহরণ দিয়ে বুঝি

ইনপুট − str="abccdcdf"

আউটপুট − স্ট্রিং-এ বিশেষ প্যালিনড্রোম সংখ্যা: ৩

ব্যাখ্যা − বিশেষ প্যালিনড্রোম সাবস্ট্রিং গুলো: "cc", "cdc", "dcd"

ইনপুট − str="baabaab"

আউটপুট − স্ট্রিং-এ বিশেষ প্যালিনড্রোম সংখ্যা: ৪

ব্যাখ্যা − বিশেষ প্যালিনড্রোম সাবস্ট্রিং গুলো: "aa", "aabaa", "aba", "aa"

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • অ্যালফাবেটের স্ট্রিং তৈরি করুন এবং দৈর্ঘ্য বের করুন। ডেটা ফাংশনে পাস করুন।
  • অস্থায়ী ভেরিয়েবল count এবং i ০ দিয়ে ইনিশিয়ালাইজ করুন।
  • স্ট্রিং দৈর্ঘ্যের সাইজের একটি অ্যারে arr তৈরি করুন এবং ০ দিয়ে ইনিশিয়ালাইজ করুন।
  • while লুপ চলবে i < len পর্যন্ত।
  • লুপের ভিতরে total = 1 এবং j = i + 1 সেট করুন।
  • আরেকটি while লুপ চলবে str[i] == str[j] && j < len পর্যন্ত।
  • লুপের ভিতরে total++ এবং j++ করুন।
  • count += (total * (total + 1) / 2), arr[i] = total, i = j সেট করুন।
  • for লুপ j=1 থেকে len-1 পর্যন্ত চলবে।
  • যদি str[j] == str[j-1] হয়, তবে arr[j] = arr[j-1] সেট করুন।
  • temp = str[j-1] সেট করুন এবং চেক করুন: j > 0 && j < (len-1) && temp == str[j+1] && str[j] != temp। সত্য হলে count += min(arr[j-1], arr[j+1])।
  • count = count - len করুন।
  • count রিটার্ন করুন।
  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int count_palindromes(string str, int len) {
    int count = 0, i = 0;
    int arr[len] = { 0 };
    while (i < len) {
        int total = 1;
        int j = i + 1;
        while (str[i] == str[j] && j < len) {
            total++;
            j++;
        }
        count += (total * (total + 1) / 2);
        arr[i] = total;
        i = j;
    }
    for (int j = 1; j < len; j++) {
        if (str[j] == str[j - 1]) {
            arr[j] = arr[j - 1];
        }
        int temp = str[j - 1];
        if (j > 0 && j < (len - 1) && (temp == str[j + 1] && str[j] != temp)) {
            count += min(arr[j-1], arr[j+1]);
        }
    }
    count = count - len;
    return count;
}

int main() {
    string str = "bcbaba";
    int len = str.length();
    cout << "Count of special palindromes in a String are: " << count_palindromes(str, len);
    return 0;
}

আউটপুট

Count of special palindromes in a String are: 3
  1. C++-এ বিশেষ ম্যাট্রিক্সে x-র সমান এন্ট্রি গণনা

  2. C++-এ সুপার প্যালিনড্রোম গণনা

  3. C++-এ ইন্টারলিভিং স্ট্রিং (Interleaving String)

  4. C++-এ দুটি স্ট্রিং-এ কমন সাবসিকোয়েন্স (Common Subsequence) গণনা