สมมติว่าเรามีสองสตริง p และ q และยังมีตัวเลข r อีกด้วย เราต้องตรวจสอบว่า p สามารถแปลงเป็น q ได้หรือไม่ โดยการเลื่อนอักขระบางตัวตามเข็มนาฬิกาไม่เกิน r ครั้ง ตัวอย่างเช่น "c" เปลี่ยนเป็น "e" ได้โดยใช้ 2 กะตามเข็มนาฬิกา
ดังนั้น หากอินพุตเป็น p ="abc", q ="ccc", r =3 เอาต์พุตจะเป็น True เนื่องจากเราสามารถแปลง "a" เป็น "c" โดยใช้ 2 กะตามเข็มนาฬิกาแล้วแปลง " b" เป็น "c" โดยใช้ 1 กะตามเข็มนาฬิกา รวมเป็น 3 กะ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้าขนาดของ a ไม่เหมือนกับขนาดของ b แล้ว
- คืนค่าเท็จ
- ถ้า k เท่ากับ 0 และ a ไม่เหมือนกับ b แล้ว
- คืนค่าเท็จ
- su:=0
- สำหรับฉันในช่วง 0 ถึงขนาดของ a ทำ
- v :=ASCII ของ b[i] - ASCII ของ a[i]
- ถ้า v>=0 แล้ว
- su :=su + v
- มิฉะนั้น
- su :=su + v + 26
- ถ้า su> k แล้ว
- คืนค่าเท็จ
- คืนค่า True
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, a, b, k): if len(a) != len(b): return False if k == 0 and a != b: return False su=0 for i in range(len(a)): v = ord(b[i])- ord(a[i]) if v>=0: su+=v else: su+=v+26 if su>k: return False return True ob = Solution() print(ob.solve("abc", "ccc", 3))
อินพุต
"abc", "ccc", 3
ผลลัพธ์
True