คำอธิบายปัญหา
กำหนดสตริง s อนุญาต: ลบ, แทรก, แก้ไข ตัวอักษร หาจำนวนการดำเนินการน้อยที่สุด เพื่อให้ s = t + t สำหรับสตริง t ใดๆ
ตัวอย่าง
s = "pqrxqsr" → Output: 2
แก้ 'x'→'p', ลบ 's' ได้ "pqrpqr" = "pqr" + "pqr"
ขั้นตอนการแก้ปัญหา (Edit Distance)
- ลองทุกจุดตัด
iแบ่งsเป็นs[:i]และs[i:] - คำนวณ
edit_distance(s[:i], s[i:])(Levenshtein distance) - หาค่า
minทุกi
การตนการทำงาน (Python)
def solve(s):
def edit_distance(s1, s2):
m, n = len(s1), len(s2)
cur = list(range(n + 1))
for i in range(m):
prev, cur = cur, [i + 1] + [0] * n
for j in range(n):
cur[j + 1] = (prev[j] if s1[i] == s2[j] else min(cur[j], prev[j], prev[j + 1]) + 1)
return cur[n]
res = len(s)
for i in range(len(s)):
res = min(edit_distance(s[:i], s[i:]), res)
return res
s = "pqrxqsr"
print(solve(s)) # Output: 2
อินพุต / เอาต์พุต
Input: "pqrxqsr" Output: 2