কম্পিউটার

পাইথনের তিনটি শর্তের মধ্যে একটি পূরণ করতে ন্যূনতম অক্ষর পরিবর্তন করার প্রোগ্রাম


ধরুন আমাদের দুটি স্ট্রিং s এবং t আছে শুধুমাত্র ছোট হাতের অক্ষর সহ। একটি অপারেশনে, আমরা s বা t-এর যেকোনো অক্ষরকে ছোট হাতের অক্ষরে পরিবর্তন করতে পারি। আমাদের নিম্নলিখিত তিনটি শর্তের একটি পূরণ করতে হবে -

  • s-এর প্রতিটি অক্ষর বর্ণমালার t-এর প্রতিটি অক্ষরের চেয়ে কঠোরভাবে ছোট।

  • t-এর প্রতিটি অক্ষর বর্ণমালার s-এর প্রতিটি অক্ষরের চেয়ে কঠোরভাবে ছোট।

  • s এবং t উভয়ই শুধুমাত্র একটি স্বতন্ত্র অক্ষর নিয়ে গঠিত।

ফলাফল পেতে আমাদের ন্যূনতম সংখ্যক অপারেশন প্রয়োজন।

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

  • যদি আমরা 2টি অপারেশনে t পরিবর্তন করে "uuu" করি, তাহলে s-এর প্রতিটি অক্ষর t-এর প্রতিটি অক্ষরের চেয়ে কম।

  • যদি আমরা 3টি ক্রিয়াকলাপে s তে "ttt" এবং t তে "sss" পরিবর্তন করি, তাহলে t-এর প্রতিটি অক্ষর s-এর প্রতিটি অক্ষরের চেয়ে কম।

  • যদি আমরা 2টি ক্রিয়াকলাপে s তে "sss" এবং t থেকে "sss" পরিবর্তন করি, তাহলে s এবং t একটি স্বতন্ত্র অক্ষর নিয়ে গঠিত।

এখানে সর্বোত্তম উপায় 2টি অপারেশনে করা হয়েছিল (হয় 1 বা 3টি)।

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

  • counter_s :=s-এ প্রতিটি অক্ষরের ফ্রিকোয়েন্সি ধরে রাখতে মানচিত্র
  • counter_t :=t-এ প্রতিটি অক্ষরের ফ্রিকোয়েন্সি ধরে রাখতে মানচিত্র
  • less_s :=অসীম, less_t :=অসীম, অনন্য :=অসীম
  • accu_s :=0, accu_t :=0
  • ছোট হাতের ইংরেজি অক্ষরে প্রতিটি অক্ষর c-এর জন্য
  • করুন
    • অনন্য :=সর্বনিম্ন অনন্য এবং (s এর আকার + t এর আকার - counter_s[c] - counter_t[c])
      • counter_t[c])
    • যদি c-এর ascii 'a'-এর ascii থেকে বড় হয়, তাহলে
      • less_a :=সর্বনিম্ন less_s এবং (s - accu_s + accu_t এর আকার)
      • less_b :=সর্বনিম্ন less_t এবং (t - accu_t + accu_s এর আকার)
    • accu_s :=accu_s + counter_s[c]
    • accu_t :=accu_t + counter_t[c]
  • সর্বনিম্ন less_s, less_t এবং অনন্য ফেরত দিন

উদাহরণ

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

from collections import Counter
import string
def solve(s, t):
   counter_s = Counter(s)
   counter_t = Counter(t)
   less_s, less_t, unique = float('inf'), float('inf'), float('inf')
   accu_s, accu_t = 0, 0
   for c in string.ascii_lowercase:
      unique = min(unique, len(s) + len(t) - counter_s[c] - counter_t[c])
      if c > 'a':
         less_a = min(less_s, len(s) - accu_s + accu_t)
         less_b = min(less_t, len(t) - accu_t + accu_s)
      accu_s += counter_s[c]
      accu_t += counter_t[c]
   return min(less_s, less_t, unique)

s = "sts"
t = "uss"
print(solve(s, t))

ইনপুট

"sts", "uss"

আউটপুট

2

  1. মুদ্রা পরিবর্তনের জন্য পাইথন প্রোগ্রাম

  2. একটি স্ট্রিং মধ্যে মিরর অক্ষর খুঁজে পেতে পাইথন প্রোগ্রাম

  3. পাইথন প্রোগ্রাম সর্বোচ্চ তিনটি।

  4. পাইথন প্রোগ্রাম চক্রাকারে একটি অ্যারেকে এক করে ঘোরানোর জন্য