ধরুন আমাদের দুটি স্ট্রিং s এবং t আছে মাত্র তিনটি অক্ষর 'A', 'B' এবং '#'। s-এ এই ক্রিয়াকলাপগুলি সম্পাদন করে s-কে t-এ রূপান্তর করা সম্ভব কিনা তা আমাদের পরীক্ষা করতে হবে।
- 'A' শুধুমাত্র বাম দিকে যেতে পারে
- 'B' শুধুমাত্র ডান দিকে যেতে পারে
- 'A' বা 'B' একে অপরকে অতিক্রম করতে পারে না
সুতরাং, যদি ইনপুটটি s ="##AB##B" t ="A###B#B" এর মতো হয়, তাহলে আউটপুটটি True হবে যেমন s এ A সহজেই বাম অবস্থানে যেতে পারে এবং মধ্যম B। ডানদিকে এক ধাপ সরাতে পারেন
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- s :=s থেকে অক্ষর নিয়ে একটি তালিকা
- t :=t থেকে অক্ষর নিয়ে একটি তালিকা
- যদি s-এর আকার t-এর আকারের সমান না হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি s এবং t-এ 'A'-এর গণনা আলাদা হয় বা s এবং t-এ 'B'-এর গণনা আলাদা হয় বা, তাহলে
- মিথ্যে ফেরত দিন
- আমি 0 থেকে s - 1 এর পরিসরের জন্য, কর
- যদি s[i] '#' এর মতো না হয়, তাহলে
- j-এর জন্য 0 থেকে t - 1 এর মাপ, করুন
- যদি (t[j] s[i] এর মত না হয়) এবং t[j] '#' এর মত না হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি t[j] s[i] এর মত হয়, তাহলে
- t[j] :='#'
- যদি s[i] 'A' এবং i
- মিথ্যে ফেরত দিন
- যদি s[i] 'B' এবং i> j এর মত হয়, তাহলে
- মিথ্যে ফেরত দিন
- লুপ থেকে বেরিয়ে আসুন
- যদি (t[j] s[i] এর মত না হয়) এবং t[j] '#' এর মত না হয়, তাহলে
- যদি s[i] '#' এর মতো না হয়, তাহলে
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s, t): s = list(s) t = list(t) if len(s) != len(t): return False if s.count('A') != t.count('A') or s.count('B') != t.count('B'): return False for i in range(len(s)): if s[i] != '#': for j in range(len(t)): if (t[j] != s[i]) and t[j] != '#': return False if t[j] == s[i]: t[j] = '#' if s[i] == 'A' and i < j: return False if s[i] == 'B' and i > j: return False break return True s = "##AB##B" t = "A###B#B" print (solve(s, t))
ইনপুট
"##AB##B", "A###B#B"
আউটপুট
True