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

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


আমাদের দুটি স্ট্রিং আছে s এবং t। আমাদের একটি স্ট্রিং merge তৈরি করতে হবে নিচের নিয়ম অনুযায়ী: যতক্ষণ না s বা t খালি হয়, নিচের অপশনগুলো থেকে একটি বেছে নিন:

  • যদি s খালি না হয়, তবে s-এর প্রথম ক্যারেক্টারটি merge-এ যোগ করুন এবং s- থেকে মুছে দিন।

  • যদি t খালি না হয়, তবে t-এর প্রথম ক্যারেক্টারটি merge-এ যোগ করুন এবং t- থেকে মুছে দিন।

আমাদের যেটি তৈরি করতে পারি সেটির মধ্যে লেক্সিকোগ্রাফিক্যালি সবচেয়ে বড় merge খুঁজে বের করতে হবে।

উদাহরণস্বরূপ, ইনপুট s = "zxyxx", t = "yzxxx" হলে আউটপুট হবে zyzxyxxxxx, কারণ:

  • s- থেকে বেছে নিন: merge = "z", s = "xyxx", t = "yzxxx"

  • t- থেকে বেছে নিন: merge = "zy", s = "xyxx", t = "zxxx"

  • t- থেকে বেছে নিন: merge = "zyz", s = "xyxx", t = "xxx"

  • s- থেকে বেছে নিন: merge = "zyzx", s = "yxx", t = "xxx"

  • s- থেকে বেছে নিন: merge = "zyzxy", s = "xx", t = "xxx"

তারপর s এবং t-এর বাকি ৫টি x গুলো merge-এর শেষে যোগ করুন।

সমাধানের ধাপসমূহ

  • ans := খালি স্ট্রিং

  • idx1 := 0, idx2 := 0

  • idx1 < s-এর আকার এবং idx2 < t-এর আকার থাকাকালীন লুপ চালান:

    • যদি s[idx1] > t[idx2] হয় অথবা (s[idx1] == t[idx2] এবং s[idx1:] >= t[idx2:]) হয়, তবে:

      • ans := ans + s[idx1]

      • idx1 := idx1 + 1

    • অন্যথায়, যদি s[idx1] < t[idx2] হয় অথবা (s[idx1] == t[idx2] এবং s[idx1:] <= t[idx2:]) হয়, তবে:

      • ans := ans + t[idx2]

      • idx2 := idx2 + 1

  • ans + s[idx1:] + t[idx2:] রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:

def solve(s, t):
    ans = ""
    idx1 = idx2 = 0
    while idx1 < len(s) and idx2 < len(t):
        if s[idx1] > t[idx2] or (s[idx1] == t[idx2] and s[idx1:] >= t[idx2:]):
            ans += s[idx1]
            idx1 += 1
        elif s[idx1] < t[idx2] or (s[idx1] == t[idx2] and s[idx1:] <= t[idx2:]):
            ans += t[idx2]
            idx2 += 1
    return ans + s[idx1:] + t[idx2:]

s = "zxyxx"
t = "yzxxx"
print(solve(s, t))

ইনপুট

"zxyxx", "yzxxx"

আউটপুট

zyzxyxxxxx
  1. পাইথনে দুটি নন-ওভারল্যাপিং সাবলিস্টের সর্বোচ্চ যোগফল বের করার প্রোগ্রাম

  2. পাইথনে নন-শেয়ারিং ওয়ার্ডসের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে সমান দৈর্ঘ্যের দুটি স্ট্রিংকে ক্যারেক্টার সোয়্যাপ করে সমান করার প্রোগ্রাম

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