কম্পিউটার

পাইথনে স্ট্রিং সাজানোর জন্য ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করার প্রোগ্রাম


ধরুন আমরা একটি স্ট্রিং s আছে. আমরা একটি সাজানো স্ট্রিং −

না পাওয়া পর্যন্ত s-এ নিম্নলিখিত অপারেশনটি করতে হবে
  • সবচেয়ে বড় সূচক i নির্বাচন করুন যেমন 1 <=i

  • সবচেয়ে বড় সূচক j নির্বাচন করুন যাতে i <=j

  • i - 1 এবং j.

    সূচকে দুটি অক্ষর বিনিময় করুন
  • সূচক i.

    থেকে প্রত্যয়টি বিপরীত করুন

স্ট্রিং সাজানোর জন্য আমাদের প্রয়োজনীয় অপারেশনের সংখ্যা খুঁজে বের করতে হবে। উত্তরটি খুব বড় হতে পারে তাই ফলাফল মডিউল 10^9 + 7 ফেরত দিন।

সুতরাং, যদি ইনপুট s ="ppqpp" এর মত হয়, তাহলে আউটপুট হবে 2 কারণ

  • প্রথম অপারেশনে, i=3, j=4। s="ppppq" পেতে s[2] এবং s[4] বিনিময় করুন, তারপর সূচক 3 থেকে সাবস্ট্রিংটি বিপরীত করুন। এখন, s="pppqp"।

  • দ্বিতীয় অপারেশনে, i=4, j=4। s="ppppq" পেতে s[3] এবং s[4] বিনিময় করুন, তারপর ইনডেক্স 4 থেকে সাবস্ট্রিংটি বিপরীত করুন, Now, s ="ppppq"।

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

  • d :=26 আকারের একটি অ্যারে এবং 0 দিয়ে পূরণ করুন

  • a :=0, t :=1

  • m :=10^9 + 7

  • n :='a'

    এর ASCII
  • প্রতিটি সূচক i এবং অক্ষর c এর বিপরীত ক্রমে, সূচী 1 থেকে শুরু করুন, করুন

    • j :=c - n

      এর ASCII
    • d[j] :=d[j] + 1

    • a :=(a + d এর সমস্ত উপাদানের যোগফল [সূচী 0 থেকে j-1]) * t/d[j] এর ভাগফল) mod m

    • t :=t * i/d[j]

      এর ভাগফল
  • একটি ফেরত দিন

উদাহরণ

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

def solve(s):
   d = [0]*26
   a = 0
   t = 1
   m = 10**9 + 7
   n = ord('a')
   for i,c in enumerate(s[::-1],1):
      j = ord(c) - n
      d[j] += 1
      a = (a+sum(d[:j])*t//d[j]) % m
      t = t*i//d[j]
   return a

s = "ppqpp"
print(solve(s))
হিসাবে ফেরত দিন

ইনপুট

"ppqpp"

আউটপুট

2

  1. পাইথনে টার্গেট তৈরি করতে কলাম ফ্লিপ করার জন্য ন্যূনতম সংখ্যক অপারেশন গণনা করার প্রোগ্রাম

  2. স্ট্রিংয়ের সংখ্যা খুঁজে বের করার জন্য প্রোগ্রাম আমরা তৈরি করতে পারি যেখানে 'a' 'a' বা 'b' হতে পারে এবং 'b' পাইথনে 'b' থাকে

  3. পাইথনে এক নম্বর থেকে অন্য নম্বর তৈরি করার জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে একটি স্ট্রিং সাবস্ট্রিং অন্যটির জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করার প্রোগ্রাম