Cho hai xâu ký tự S1 và S2, mỗi xâu có độ dài không quá 100 ký tự. Cho phép thực hiện các phép biến đổi sau đây đối với xâu ký tự:
1. Thay thế một ký tự nào đó bởi ký tự khác 2. Đổi chỗ hai ký tự liền nhau
3. Chèn một ký tự vào sau vị trí nào đó 4. Xoá bớt 1 ký tự
Ta gọi khoảng cách giữa hai xâu S1 và S2 là số ít nhất các phép biến đổi nêu trên cần áp dụng đối với xâu S1để biến nó thành xâu S2.
Yêu cầu: Tính khoảng cách giữa 2 xâu S1, S2 cho trước và chỉ ra thứ tự các phép biến đổi.
Ví dụ: Giả sử S1 = 'Barney'; S2 = 'brawny'. Khoảng cách giữa 2 xâu là 4. Dãy các phép biến đổi cần thực hiện là:
1. Thay ký tự 1 của S1 (B) bởi b
2. Đổi chỗ ký tự thứ 2 (a) và thứ 3 (r) của S1. 3. Chèn ký tự w vào S1 sau ký tự thứ 3. 4. Xoá ký tự thứ 5 của S1.
Dãy các phép biến đổi có thể mô tả như sau:
'Barney' → 'barney' → 'braney' → 'brawney' → 'brawny'
Dữ liệu: vào từ file văn bản STREDIT.INP có cấu trúc như sau:
• Dòng đầu tiên chứa xâu S1 • Dòng thứ hai chứa xâu S2
Kết quả: Ghi ra file văn bản STREDIT.OUT
• Dòng đầu tiên ghi số lượng các phép biến đổi cần sử dụng K
• Mỗi dòng i trong số K dòng tiếp theo mô tả phép biến đổi được sử dụng ở lần thứ i gồm các tham số sau: các tham số ghi trên 1 dòng ghi cách nhau 1 dấu cách.
♦ 1, P, C (nếu là phép thay ký tự tại vị trí P bằng ký tự C) ♦ 2, I, I + 1 (nếu là phép đổi chỗ 2 ký tự thứ I và thứ I + 1) ♦ 3, P, C (nếu là phép chèn ký tự C vào sau vị trí P) ♦ 4, P (nếu là phép xoá ký tự thứ P) Ví dụ: STREDIT.INP STREDIT.OUT Barney brawny 4 1 1 b 2 2 3