ধরুন আমাদের দুটি স্ট্রিং 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]
- অনন্য :=সর্বনিম্ন অনন্য এবং (s এর আকার + t এর আকার - counter_s[c] - 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