สมมติว่ามีสตริงสองตัว S และ T ความยาวเท่ากัน เราต้องตรวจสอบว่าสามารถตัดทั้งสองสตริงที่จุดเดียวกันได้หรือไม่ ทำให้ส่วนแรกของ S และส่วนที่สองของ T รวมกันเป็นพาลินโดรม
เช่น ถ้าอินพุตคือ S = "cat" T = "pac" ผลลัพธ์จะเป็น True เนื่องจากตัดเป็น "c"+"at" และ "d"+"ac" แล้ว "c"+"ac" เป็นพาลินโดรม
ขั้นตอนการแก้ปัญหา
- n := ขนาดของ a
- i := 0
- while i < n และ a[i] เท่ากับ b[n-i-1] ทำ i := i + 1
- คืนค่า true ถ้า a[i:n-i] เป็นพาลินโดรม หรือ b[i:n-i] เป็นพาลินโดรม
ตัวอย่างโค้ด
class Solution:
def solve(self, a, b):
n = len(a)
i = 0
while i < n and a[i] == b[-i-1]:
i += 1
palindrome = lambda s: s == s[::-1]
return palindrome(a[i:n-i]) or palindrome(b[i:n-i])
ob = Solution()
S = "cat"
T = "dac"
print(ob.solve(S, T))
อินพุต
"cat","dac"
เอาต์พุต
True