Khác với chế độ hoảng loạn (chỉ bỏ qua phần tử lỗi), nhiều trình soạn thảo/biên dịch dùng chiến lược phục hồi bằng chèn thêm ký hiệu để tự động "vá" lỗi ngoặc lệch. Cho chuỗi s chỉ chứa 3 loại ngoặc ()[]{} và có thể xen lẫn ký tự khác (giữ nguyên, không ảnh hưởng thuật toán), hãy mô phỏng thuật toán sửa lỗi sau, dùng ngăn xếp:
Duyệt s từ trái sang phải, xây dựng dần chuỗi kết quả:
discards, dừng vòng lặp cho ký tự này.insertions, lấy đỉnh ra khỏi ngăn xếp, rồi lặp lại (so sánh tiếp c với đỉnh mới của ngăn xếp).Sau khi duyệt hết s, nếu ngăn xếp còn ký tự mở dư, lần lượt lấy ra từng ký tự (từ đỉnh xuống đáy) và chèn ký tự đóng tương ứng vào cuối kết quả (mỗi lần tăng insertions).
In ra 2 số insertions discards, và chuỗi kết quả sau khi sửa.
Ví dụ: s= (a[b)c]. Xử lý: ( đẩy, a giữ nguyên, [ đẩy, b giữ nguyên; gặp ): đỉnh là [ cần đóng bằng ] = ) ⇒ chèn ], lấy [ ra (insertions=1); so lại ) với đỉnh mới ( cần đóng bằng ) = ) ⇒ khớp, lấy ( ra, thêm ); c giữ nguyên; gặp ]: ngăn xếp rỗng ⇒ thừa, loại bỏ (discards=1). Kết quả: insertions=1, discards=1, chuỗi sửa: (a[b])c.
Một dòng duy nhất chứa chuỗi s (0≤∣s∣≤105), có thể rỗng.
Dòng 1: 2 số nguyên insertions discards cách nhau 1 dấu cách. Dòng 2: chuỗi kết quả sau khi sửa (có thể rỗng — in ra dòng trống).
Ví dụ:
Đầu vào:
(a[b)c]
Đầu ra:
1 1
(a[b])c
Đầu vào:
(a[b]{c})Đầu ra:
0 0
(a[b]{c})
Đang tải editor...