प्रत्येक मूव i में एक अनयूज़्ड इंडेक्स चुनकर कैरेक्टर को i बार शिफ्ट कर सकते हैं (z→a रैप)। K मूव्स में s को t में बदल सकते हैं?
एल्गोरिदम
- अगर लंबाई अलग तो False।
- प्रत्येक शिफ्ट डिफरेंस d (0-25) के लिए उपलब्ध मूव्स काउंट:
min(1, k-d+1) + (k-d)//26। - प्रत्येक कैरेक्टर पेयर के लिए जरूरी डिफरेंस चेक करें और काउंट घटाएं।
- कोई काउंट नेगेटिव हुआ तो False, वरना True।
उदाहरण कोड
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 -> p→v (6 शिफ्ट), o→w (8 शिफ्ट) -> True
इनपुट/आउटपुट
इनपुट: "poput", "vwput", 9
आउटपुट: True