ধরুন আমাদের দুটি স্ট্রিং s এবং t আছে, আমাদের পরীক্ষা করতে হবে s কে k চালে t তে রূপান্তর করা যায় নাকি কম। ith মুভ আপনি এই অপারেশন করতে পারেন.
-
s-তে যেকোন সূচী j (1 থেকে শুরু) নির্বাচন করুন, যেমন 1 <=j <=s এবং j-এর আকার পূর্ববর্তী কোনো পদক্ষেপে নির্বাচন করা হয়নি, এবং সেই সূচক i সংখ্যায় অক্ষরটি বার বার স্থানান্তর করুন।
-
যেমন আছে তেমনই থাকুন।
এখানে একটি অক্ষর স্থানান্তরিত করার অর্থ হল বর্ণমালার পরবর্তী অক্ষর দ্বারা এটি প্রতিস্থাপন করা (যদি অক্ষর 'z' হয় তবে এটিকে 'a' তে মোড়ানো)। সুতরাং i বার দ্বারা একটি অক্ষর স্থানান্তর করা ইঙ্গিত করে যে শিফট অপারেশনগুলি i বার প্রয়োগ করা হচ্ছে৷
৷সুতরাং, যদি ইনপুটটি s ="poput" t ="vwput" k =9 এর মত হয়, তাহলে আউটপুটটি True হবে কারণ i =6 এ, আমরা 'p' কে 'v' এ রূপান্তর করতে পারি এবং i =8 এ, আমরা 'o' কে 'w' এ রূপান্তর করতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
-
যদি s-এর আকার t-এর আকারের সমান না হয়, তাহলে
-
রিটার্ন ফলস
-
-
গণনা :=একটি অ্যারে হোল্ডিং (সর্বনিম্ন 1 এবং (k - i + 1 +(k - i)/26)) 0 থেকে 25 পর্যন্ত সকল i জন্য
-
প্রতিটি অক্ষরের জন্য s থেকে c1 এবং t থেকে c2, করুন
-
যদি c1 c2 এর মত না হয়, তাহলে
-
পার্থক্য :=(c2 এর ASCII - c1 + 26 এর ASCII) মোড 26
-
যদি গণনা [ পার্থক্য] <=0, তারপর
-
রিটার্ন ফলস
-
-
গণনা [ পার্থক্য] :=গণনা [ পার্থক্য] - 1
-
-
-
রিটার্ন ট্রু
আরও ভালোভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি
উদাহরণ
def solve(s, t, k): if len(s) != len(t): return False count = [min(1, k - i + 1) + (k - i)//26 for i in range(26)] for c1, c2 in zip(s, t): if (c1 != c2): diff = (ord(c2) - ord(c1) + 26) % 26 if count[diff] <= 0: return False count[diff] -= 1 return True s = "poput" t = "vwput" k = 9 print(solve(s, t,k))
ইনপুট
"poput","vwput",9
আউটপুট
True