কম্পিউটার

C++ এ প্যালিনড্রোম সাবস্ট্রিং বারবার মুছে ফেলার পরে একটি স্ট্রিং মুছে ফেলার সর্বনিম্ন পদক্ষেপ


সমস্যা বিবৃতি

শুধুমাত্র পূর্ণসংখ্যা হিসাবে অক্ষর ধারণকারী একটি স্ট্রিং দেওয়া. আমাদের ন্যূনতম সংখ্যক ধাপে এই স্ট্রিংয়ের সমস্ত অক্ষর মুছে ফেলতে হবে যেখানে এক ধাপে আমরা সাবস্ট্রিংটি মুছে ফেলতে পারি যা একটি প্যালিনড্রোম। একটি সাবস্ট্রিং মুছে ফেলার পরে অবশিষ্ট অংশগুলি সংযুক্ত করা হয়৷

উদাহরণ

যদি ইনপুট স্ট্রিং 3441213 হয় তাহলে ন্যূনতম 2টি ধাপ প্রয়োজন

  • প্রথমে স্ট্রিং থেকে 121 সরান। এখন অবশিষ্ট স্ট্রিং হল 3443
  • অবশিষ্ট স্ট্রিংটি প্যালিনড্রোম হিসাবে সরান

অ্যালগরিদম

এই সমস্যা সমাধানের জন্য আমরা ডায়নামিক প্রোগ্রামিং ব্যবহার করতে পারি

<পূর্ব>1. ধরুন dp[i][j] সাবস্ট্রিং s[i, j]2 মুছে ফেলার জন্য কতগুলি ধাপ লাগে তা বোঝায়। প্রতিটি অক্ষর একা বা কিছু সাবস্ট্রিং এর অংশ হিসাবে মুছে ফেলা হবে তাই প্রথম ক্ষেত্রে আমরা অক্ষরটি নিজেই মুছে ফেলব এবং সাব-প্রবলেম (i+1, j)3 কল করব। দ্বিতীয় ক্ষেত্রে আমরা ডান পাশে বর্তমান অক্ষরের সমস্ত ঘটনার পুনরাবৃত্তি করব, যদি K এইরকম একটি ঘটনার সূচক হয় তবে সমস্যাটি দুটি উপ-সমস্যা (i+1, K – 1) এবং (K+1, j) 4। আমরা এই সাব-সমস্যা (i+1, K-1) পর্যন্ত পৌঁছাতে পারি কারণ আমরা একই অক্ষর মুছে দিতে পারি এবং মধ্য সাবস্ট্রিং5-এর জন্য কল করতে পারি। আমাদের একটি ক্ষেত্রে যত্ন নেওয়া দরকার যখন প্রথম দুটি অক্ষর একই হয় সেক্ষেত্রে আমরা সরাসরি উপ-সমস্যা (i+2, j) কমাতে পারি

উদাহরণ

#include নেমস্পেস ব্যবহার করে std;int getMinRequiredSteps(string str) { int n =str.length(); int dp[n + 1][n + 1]; (int i =0; i <=n; i++) { এর জন্য (int j =0; j <=n; j++) { dp[i][j] =0; } } (int len ​​=1; len <=n; len++) { এর জন্য (int i =0, j =len - 1; j  

আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট তৈরি করে

আউটপুট

সর্বনিম্ন প্রয়োজনীয় পদক্ষেপ:2

  1. C++ এ পূর্ণসংখ্যার একটি স্ট্রিংয়ে 6 দ্বারা বিভাজ্য সাবস্ট্রিংয়ের সংখ্যা

  2. C++ এ একটি স্ট্রিং-এ প্রথম পুনরাবৃত্তি করা শব্দটি খুঁজুন

  3. C++ ব্যবহার করে একটি স্ট্রিং এর সাবস্ট্রিং এর সংখ্যা খুঁজুন

  4. C++ এ একটি স্ট্রিং প্যালিনড্রোম তৈরি করতে ন্যূনতম সংখ্যক মুছে ফেলা।