[Buổi 15][Ngăn xếp][WS] Bài 1: Kiểm định cấu trúc ngoặc của biểu thức
Kiểm định cấu trúc ngoặc của biểu thức
Bối cảnh và bài toán
Một bộ phân tích cú pháp nhận chuỗi chỉ gồm bốn ký hiệu (, ), [ và ]. Một chuỗi được xem là hợp lệ nếu mọi dấu đóng ghép đúng với dấu mở gần nhất chưa được ghép và toàn bộ dấu mở đều được đóng.
Yêu cầu
Xác định chuỗi đầu vào có hợp lệ hay không.
Input
- Một dòng chứa chuỗi
s; dòng có thể rỗng.
Output
In YES nếu chuỗi hợp lệ, ngược lại in NO.
Ràng buộc
0 <= |s| <= 2 * 10^5s[i] thuộc tập { (, ), [, ] }
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | |s| <= 100 | 01–04 |
| S2 | 30% | |s| <= 5000 | 05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
([()[]])
Output
YES
Giải thích. Mỗi dấu đóng khớp đúng loại với dấu mở gần nhất chưa đóng.
Ví dụ 2
Input
([)]
Output
NO
Giải thích. Dấu ) gặp khi dấu mở gần nhất là [, nên cấu trúc sai ngay tại vị trí đó.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M05-B15-WS01 |
| Buổi | B15 |
| Loại bài | WORKSHOP |
| Mức độ khó | Trung bình (Medium) |
| Thời gian làm bài khuyến nghị | 35 phút |
| Time limit | 1 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Nguồn: Phỏng theo UVa Online Judge 673 – Parentheses Balance.
Tham khảo: https://onlinejudge.org/external/6/673.pdf
Comments