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

পাইথনে দুটি স্ট্রিংয়ের লার্জেস্ট মার্জ (Largest Merge) বের করা

ধরি, 'a' এবং 'b' নামে দুটি স্ট্রিং এবং 'merge' নামে একটি স্ট্রিং আছে। টাস্ক হলো 'merge' স্ট্রিংকে 'a' এবং 'b'-এর ক্যারেক্টার দিয়ে এভাবে পূরণ করা যাতে:

  • যদি স্ট্রিং 'a' নন-এমপ্টি হয়, তবে 'a'-র প্রথম ক্যারেক্টার রিমুভ করে 'merge'-এ কপি করুন।
  • যদি স্ট্রিং 'b' নন-এমপ্টি হয়, তবে 'b'-র প্রথম ক্যারেক্টার রিমুভ করে 'merge'-এ কপি করুন।
  • যদি 'a' এবং 'b' দুটোই নন-এমপ্টি হয়, তবে 'a'-র প্রথম ক্যারেক্টার রিমুভ করে 'merge'-এ কপি করুন, তারপর 'b'-র প্রথম ক্যারেক্টার (যদি থাকে) রিমুভ করে 'merge'-এ কপি করুন।
  • দুই স্ট্রিংয়ের ক্যারেক্টার লেক্সিকোগ্রাফিক্যালি (lexicographically) রিমুভ করুন, অর্থাৎ যদি স্ট্রিং 'a' স্ট্রিং 'b' থেকে বড় হয়, তবে 'a'-র ক্যারেক্টার প্রথম রিমুভ করুন তারপর 'b'-র।
  • 'merge' স্ট্রিং রিটার্ন করুন।

উদাহরণ-১:

ইনপুট-১:

a = "bacaa"
b = "abcaa"

আউটপুট:

babcacaaaa

ব্যাখ্যা:

যেহেতু দিয়ে স্ট্রিং 'a' লেক্সিকোগ্রাফিক্যালি স্ট্রিং 'b' থেকে বড়, তাই 'a'-র প্রথম ক্যারেক্টার "b" এক্সট্র্যাক্ট করব এবং তারপর 'b'-র। এক্সট্র্যাক্ট করার পর স্ট্রিং হবে "babcacaaaa"।

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

রিকার্সিভ পদ্ধতিতে এই সমস্যা সমাধান করতে 'a' এবং 'b'-র প্রতিটি ক্যারেক্টার এক্সট্র্যাক্ট করব এবং চেক করব 'a'-র ক্যারেক্টারগুলো 'b'-র চেয়ে লেক্সিকোগ্রাফিক্যালি বড় কিনা এবং শেষে 'merge'-এ কনক্যাটেনেট করব।

প্রতিটি ক্যারেক্টারের কিছু পজিশনের পর সাবস্ট্রিং খুঁজে বের করব এবং যদি वो অন্য স্ট্রিং থেকে লেক্সিকোগ্রাফিক্যালি বড় হয় তবে 'merge'-এ কনক্যাটেনেট করব।

  • দুই ইনপুট স্ট্রিং 'a' এবং 'b' নিন।

  • রিকার্সিভ স্ট্রিং ফাংশন concatenateLargest(string a, string b) দুটি স্ট্রিং ইনপুট নেয় এবং কনক্যাটেনেশন পরীক্ষের পর সবচেয়ে বড় স্ট্রিং রিটার্ন করে, অর্থাৎ (string 'a' + string 'b')।

  • যদি 'a > b' হয়, তবে স্ট্রিং 'a'-কে পজিশন '০'-এ স্প্লিট করে 'a'-র আউটপুট রিটার্ন করুন।

  • যদি 'a < b' হয়, তবে স্ট্রিং 'b'-কে পজিশন '০'-এ স্প্লিট করে 'b'-র আউটপুট রিটার্ন করুন।

  • কনক্যাটেনেটেড স্ট্রিং রিটার্ন করুন।

উদাহরণ

def concatenateLargest(a, b):
    ans = ""
    while a and b:
        if a > b:
            ans = a[0]
            a = a[1:]
        else:
            ans = b[0]
            b = b[1:]
    ans = a
    ans = b
    return ans

a = "bacaa"
b = "abcaa"
print(concatenateLargest(a, b))

উপরের কোড রান করলে আউটপুট আসবে:

আউটপুট

bacabcaaaa

দুটি স্ট্রিং "bacaa" এবং "abcaa" দিয়ে দিয়ে সমস্যা অনুযায়ী মার্জ করলে "bacabcaaaa" হবে।

  1. পাইথনে দুটি ডিকশনারি মার্জ (Merge) করার পদ্ধতি

  2. পাইথন কোড: দুটি স্ট্রিং-এর কমন ক্যারেক্টার অ্যালফাবেটিকেল অর্ডারে প্রিন্ট করা

  3. পাইথনে দুটি ডিকশনারি মার্জ (Merge) করা

  4. পাইথনে দুটি স্ট্রিং জড়িয়ে একটিতে রূপান্তর করা