Cho hai chuỗi S và T là hoán vị của nhau. Mỗi phép toán: lấy ký tự đầu hoặc cuối của S và chèn vào vị trí bất kỳ. Tìm số phép toán tối thiểu để biến S thành T.
Ví dụ
Đầu vào: s = "zyvxw", t = "vwxyz".
Đầu ra: 3 (các bước: lấy 'w' chèn sau 'v', lấy 'z' chèn sau 'x', lấy 'y' chèn sau 'x').
Thuật toán
- Khởi tạo
ans = n = len(s). - Với mỗi
itừ 0 đếnn-1:- Đặt
k = 0. - Với
jtừiđếnn-1:- Tìm
ktrongtsao chos[j] == t[k]. - Cập nhật
ans = min(ans, n - (j - i + 1)). - Tăng
k.
- Tìm
- Đặt
- Trả về
ans.
Mã nguồn Python
class Solution:
def solve(self, s, t):
ans = n = len(s)
for i in range(n):
k = 0
for j in range(i, n):
for k in range(k, len(t)):
if s[j] == t[k]:
ans = min(ans, n - (j - i + 1))
break
k += 1
return ans
ob = Solution()
s = "zyvxw"
t = "vwxyz"
print(ob.solve(s, t))
Đầu vào / Đầu ra
Input: "zyvxw", "vwxyz"
Output: 5