কম্পিউটার

C++ এ বৈধ প্যালিনড্রোম III


ধরুন আমাদের একটি স্ট্রিং s এবং আরেকটি সংখ্যা k; প্রদত্ত স্ট্রিংটি কে-প্যালিনড্রোম কিনা তা আমাদের পরীক্ষা করতে হবে।

একটি স্ট্রিংকে কে-প্যালিনড্রোম বলা হয় যদি এটি থেকে সর্বাধিক k অক্ষর সরিয়ে একটি প্যালিনড্রোমে রূপান্তরিত করা যায়।

সুতরাং, যদি ইনপুটটি s ="abcdeca", k =2 এর মত হয়, তাহলে আউটপুট সত্য হবে যেমন 'b' এবং 'e' অক্ষর মুছে দিলে তা হবে প্যালিনড্রোম।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন lcs() সংজ্ঞায়িত করুন, এটি s, t,

    লাগবে
  • n :=s

    এর আকার
  • s

    এর আগে একটি ফাঁকা স্থান যোগ করুন
  • t

    এর আগে একটি ফাঁকা স্থান যোগ করুন
  • একটি 2D অ্যারে ডিপি আকারের (n + 1) x (n + 1) সংজ্ঞায়িত করুন

  • আরম্ভ করার জন্য i :=1, যখন i <=n, আপডেট করুন (i 1 দ্বারা বাড়ান), −

    • j শুরু করার জন্য :=1, যখন j <=n, আপডেট করুন (j 1 দ্বারা বৃদ্ধি করুন), করুন −

      • dp[i, j] :=সর্বাধিক dp[i - 1, j] এবং dp[i, j - 1]

      • যদি s[i] t[j] এর মত হয়, তাহলে −

        • dp[i, j] :=সর্বাধিক dp[i, j] এবং 1 + dp[i - 1, j - 1]

  • dp[n, n]

    ফেরত দিন
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • যদি s এর আকার না হয়, তাহলে −

    • প্রত্যাবর্তন সত্য

  • x :=ফাঁকা স্থান

  • আরম্ভ করার জন্য i :=s এর আকার, যখন i>=0, আপডেট করুন (i 1 দ্বারা কম করুন), −

    • x :=x + s[i]

  • s

    এর রিটার্ন সাইজ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int lcs(string s, string t){
      int n = s.size();
      s = " " + s;
      t = " " + t;
      vector<vector<int> > dp(n + 1, vector<int>(n + 1));
      for (int i = 1; i <= n; i++) {
         for (int j = 1; j <= n; j++) {
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            if (s[i] == t[j])
            dp[i][j] = max(dp[i][j], 1 + dp[i - 1][j - 1]);
         }
      }
      return dp[n][n];
   }
   bool isValidPalindrome(string s, int k) {
      if (!s.size())
      return true;
      string x = "";
      for (int i = s.size() - 1; i >= 0; i--)
         x += s[i];
      return s.size() - lcs(s, x) <= k;
   }
};
main(){
   Solution ob;
   cout << (ob.isValidPalindrome("abcdeca", 2));
}

ইনপুট

"abcdeca", 2

আউটপুট

1

  1. C++ এ প্যালিনড্রোম সাবস্ট্রিং কোয়েরি

  2. C++-এ K সংখ্যার N'th প্যালিনড্রোম

  3. C++ এ বৈধ সুডোকু

  4. একটি সংখ্যা C++ এ প্যালিনড্রোম কিনা তা পরীক্ষা করুন