Cho 2 chuỗi a, b cùng độ dài. Chọn chỉ số cắt, tách a = a_pref + a_suff, b = b_pref + b_suff. Kiểm tra a_pref + b_suff hoặc b_pref + a_suff có phải palindrome không.
Ví dụ: a="pqrst", b="turqp" → True. Cắt: a=["pq","rst"], b=["tu","rqp"], a_pref+b_suff = "pqrqp" là palindrome.
Giải thuật (Hai con trỏ từ 2 đầu)
- Thử 2 hướng: (
a,b) và (b,a). - Con trỏ
i=0(đầux),j=len(x)-1(cuốiy). - Trong khi
x[i] == y[j]vài < len(x),j > 0:i++,j--. - Phần giữa:
midx = x[i:j+1],midy = y[i:j+1]. - Nếu
midxhoặcmidylà palindrome → True.
Ví dụ minh họa
def solve(a, b):
for x, y in [[a, b], [b, a]]:
i, j = 0, len(x) - 1
while x[i] == y[j] and i < len(x) and j > 0:
i += 1
j -= 1
midx = x[i:j+1]
midy = y[i:j+1]
if midx == midx[::-1] or midy == midy[::-1]:
return True
return False
a = "pqrst"
b = "turqp"
print(solve(a, b))
Đầu vào
"pqrst", "turqp"
Đầu ra
True