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

C++-এ দীর্ঘতম সাধারণ সাবস্ট্রিং-এর দৈর্ঘ্য বের করার প্রোগ্রাম


সমস্যা বিবরণ

দুটি লোয়ারকেস স্ট্রিং X এবং Y দেওয়া থাকলে, তাদের দীর্ঘতম সাধারণ সাবস্ট্রিং-এর দৈর্ঘ্য খুঁজে বের করতে হবে।

উদাহরণ: X = "helloworld", Y = "worldbook" হলে আউটপুট হবে 5, কারণ "world" হল দীর্ঘতম সাধারণ সাবস্ট্রিং এবং এর দৈর্ঘ্য 5।

সমাধানের পদ্ধতি

ডাইনামিক প্রোগ্রামিং ব্যবহার করে এই সমস্যাটি সমাধান করা যায়। নিচে ধাপগুলো দেওয়া হলো:

  1. একটি ২D অ্যারে longest তৈরি করুন যার আকার (m+1) × (n+1)। এখানে m এবং n হল দুটি স্ট্রিং-এর দৈর্ঘ্য।
  2. len = 0 ইনিশিয়ালাইজ করুন।
  3. নেস্টেড লুপ চালান: বাহ্যিক লুপ i = 0 থেকে m পর্যন্ত, এবং অভ্যন্তরীণ লুপ j = 0 থেকে n পর্যন্ত।
  4. যদি i == 0 বা j == 0 হয়, তবে longest[i][j] = 0।
  5. অন্যथा, যদি X[i-1] == Y[j-1] হয়, তবে:
    • longest[i][j] = longest[i-1][j-1] + 1
    • যদি len < longest[i][j] হয়, তবে len আপডেট করুন এবং বর্তমান সারি ও কলাম সংরক্ষণ করুন।
  6. অন্যথায় longest[i][j] = 0।
  7. শেষে len রিটার্ন করুন।

C++ কোড উদাহরণ

#include <iostream>
#include <cstring>
using namespace std;

int solve(char* X, char* Y, int m, int n) {
    int longest[m + 1][n + 1];
    int len = 0;
    int row, col;

    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= n; j++) {
            if (i == 0 || j == 0)
                longest[i][j] = 0;
            else if (X[i - 1] == Y[j - 1]) {
                longest[i][j] = longest[i - 1][j - 1] + 1;
                if (len < longest[i][j]) {
                    len = longest[i][j];
                    row = i;
                    col = j;
                }
            } else
                longest[i][j] = 0;
        }
    }
    return len;
}

int main() {
    char X[] = "helloworld";
    char Y[] = "worldbook";
    int m = strlen(X);
    int n = strlen(Y);
    cout << solve(X, Y, m, n);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: "helloworld", "worldbook"

আউটপুট: 5

সময় ও জটিলতা

  • সময় জটিলতা: O(m × n)
  • স্থান জটিলতা: O(m × n)
  1. C++ প্রোগ্রাম: দিয়ে गये সিকোয়েন্স থেকে লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্স খুঁজে বের করা

  2. স্ট্রিংয়ের দৈর্ঘ্য (Length) বের করার C++ প্রোগ্রাম

  3. পাইথনে একটি স্ট্রিং-এ সর্বোচ্চ দৈর্ঘ্যের পুনরাবৃত্ত সাবস্ট্রিং খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে সর্বোচ্চ দৈর্ঘ্যের প্যালিনড্রোমিক সাবস্ট্রিং খুঁজে বের করার প্রোগ্রাম