ধরুন আমাদের দুটি সাংখ্যিক স্ট্রিং s এবং t আছে, আমরা যে কোনো সংখ্যক বার নিম্নলিখিত অপারেশনটি ব্যবহার করে স্ট্রিং s থেকে t তে রূপান্তর করতে চাই:1. s-এ একটি খালি নয় এমন সাবস্ট্রিং নির্বাচন করুন এবং অক্ষরগুলি আরোহী ক্রম অনুসারে সাজান। স্ট্রিং s কে স্ট্রিং টি তে রূপান্তর করা সম্ভব কি না তা আমাদের পরীক্ষা করতে হবে।
সুতরাং, যদি ইনপুটটি s ="95643" t ="45963" এর মতো হয়, তবে আউটপুটটি True হবে কারণ আমরা "95643" -> "95463" -> "45963" এর মতো ব্যবহার করে s কে t এ রূপান্তর করতে পারি।>
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
স্থান :=একটি মানচিত্র যেখানে ডিফল্ট মান প্রকারের তালিকা
-
s-এর রেঞ্জের সাইজ 0 থেকে নিচের জন্য, করুন
-
key :=s[i] পূর্ণসংখ্যা হিসাবে
-
জায়গার শেষে i ঢোকান[কী]
-
-
প্রতিটি e-এর জন্য t, করুন
-
কী :=ই পূর্ণসংখ্যা হিসাবে
-
যদি স্থান [কী] খালি থাকে, তাহলে
-
রিটার্ন ফলস
-
-
i :=স্থানের শেষ উপাদান[কী]
-
j-এর জন্য রেঞ্জ 0 থেকে কী - 1, করুন
-
যদি স্থানগুলি [j] অ-খালি হয় এবং স্থানগুলির শেষ উপাদান [j]
-
রিটার্ন ফলস
-
-
-
স্থান[কী]
থেকে শেষ উপাদান মুছুন
-
-
-
রিটার্ন ট্রু
উদাহরণ
আরও ভালোভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি
from collections import defaultdict
def solve(s, t):
places = defaultdict(list)
for i in reversed(range(len(s))):
key = int(s[i])
places[key].append(i)
for e in t:
key = int(e)
if not places[key]:
return False
i = places[key][-1]
for j in range(key):
if places[j] and places[j][-1] < i:
return False
places[key].pop()
return True
s = "95643"
t = "45963"
print(solve(s, t)) ইনপুট
"95643", "45963"
আউটপুট
True