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

পাইথনে স্ট্রিংকে k ডISTINCT পার্টিশনে ভাগ করার প্রোগ্রাম

ধরুন আমাদের একটি স্ট্রিং s এবং একটি মান k আছে। k-এর মান s-র দৈর্ঘ্যের ফ্যাক্টর, ধরুন দৈর্ঘ্য n। আমরা s-কে n/kটি সাবস্ট্রিং t_i এ ভাগ করতে পারি যাদের সাইজ k। তারপর এই t_i ব্যবহার করে u_i বানাতে হবে যাতে:

  • u_i-তে থাকা ক্যারেক্টারগুলো t_i-এর ক্যারেক্টারদের সাবসিকোয়েন্স
  • রিপিট হওয়া ক্যারেক্টারগুলো সরিয়ে ফেলা হবে যাতে u_i-তে প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি ১ হয়

আমাদের এই u_i স্ট্রিংগুলো বের করতে হবে।

উদাহরণস্বরূপ, যদি ইনপুট s = "MMPQMMMRM" এবং k = 3 হয়, তবে আউটপুট হবে ["MP", "QM", "MR"] কারণ s-র সাইজ ৯, k ৩, তাই ৯/৩ = ৩। স্ট্রিংগুলো হলো MMP, QMM, MRM, কিন্তু ডুপ্লিকেট ক্যারেক্টার না থাকায় সেগুলো হবে MP, QM, MR।

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

  • i := 0, ret := [], mp := {}, to_print := ""
  • while i < len(s):
    • যদি i % k == 0 and i != 0, তবে to_print ret-এ অ্যেন্ড করুন, mp এবং to_print ক্লিয়ার করুন
    • যদি s[i] mp-এ না থাকে, তবে mp[s[i]] := 0 এবং to_print += s[i]
    • i += 1
  • to_print ret-এ অ্যেন্ড করুন
  • ret রিটার্ন করুন

উদাহরণ

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

def solve(s, k):
    i = 0
    ret = []
    mp, to_print = {}, ""
    while i < len(s):
        if i % k == 0 and i != 0:
            ret.append(to_print)
            mp, to_print = {}, ""
        if s[i] not in mp.keys():
            mp[s[i]] = 0
            to_print += s[i]
        i += 1
    ret.append(to_print)
    return ret

s = "MMPQMMMRM"
k = 3
print(solve(s, k))

ইনপুট

"MMPQMMMRM", 3

আউটপুট

['MP', 'QM', 'MR']
  1. পাইথন প্রোগ্রাম দিয়ে লিস্টকে স্ট্রিংয়ে রূপান্তর

  2. পাইথনে লিস্টকে স্ট্রিংে কনভার্ট করা

  3. পাইথনে স্ট্রিং স্প্লিট ও জয়েন করার প্রোগ্রাম

  4. পাইথনে ক্যারেক্টারের লিস্টকে স্ট্রিংয়ে রূপান্তর করার প্রোগ্রাম