Kiểm tra biểu thức dấu ngoặc hợp lệ
Bộ tiền xử lý cú pháp của trình biên dịch ngôn ngữ truy vấn AI tại AI Empire Academy cần kiểm tra xem một chuỗi biểu thức S chỉ gồm các ký tự mở ngoặc (, [, { và đóng ngoặc ), ], }…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: std stack, std string, loops.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu và vận dụng cấu trúc dữ liệu Ngăn xếp (
std::stack) với cơ chế vào sau - ra trước (LIFO). - Xử lý các cặp dấu ngoặc đóng/mở tương ứng với 3 loại: tròn
(), vuông[], và nhọn/xoắn{}. - Kiểm tra an toàn trước khi lấy phần tử đỉnh (
empty()trướctop()vàpop()). - Phân tích độ phức tạp thời gian O(N) và không gian O(N).
Mô tả bài toán
Bộ tiền xử lý cú pháp của trình biên dịch ngôn ngữ truy vấn AI tại AI Empire Academy cần kiểm tra xem một chuỗi biểu thức S chỉ gồm các ký tự mở ngoặc (, [, { và đóng ngoặc ), ], } có hợp lệ hay không.
Một chuỗi dấu ngoặc được gọi là hợp lệ khi và chỉ khi:
- Mỗi dấu mở ngoặc phải được đóng bởi dấu ngoặc cùng loại tương ứng.
- Các dấu ngoặc phải được đóng theo đúng thứ tự mở trước - đóng sau (lồng nhau hợp lệ).
- Mỗi dấu đóng ngoặc phải tương ứng với một dấu mở ngoặc trước đó.
- Chuỗi rỗng được coi là hợp lệ.
Nếu chuỗi hợp lệ, in ra: HOP LE. Nếu chuỗi không hợp lệ, in ra: KHONG HOP LE.
Quy ước nộp bài
- Chỉ cần viết một chương trình đọc
stdinvà in rastdout. Bài này không yêu cầu viết hàm. - Không dùng
coutđể in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vàostdoutvà làm bài sai. - Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
- Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.
Input
Dòng đầu tiên chứa số nguyên T là số lượng bộ test (1 ≤ T ≤ 50). T dòng tiếp theo, mỗi dòng chứa một chuỗi ký tự S chỉ gồm các ký tự ngoặc ()[]{} (0 ≤ |S| ≤ 105). Tổng độ dài các chuỗi trong tất cả các test không vượt quá 2 · 105.
Output
Gồm T dòng, mỗi dòng in kết quả HOP LE hoặc KHONG HOP LE cho bộ test tương ứng.
Ràng buộc
- 1 ≤ T ≤ 50.
- Tổng độ dài chuỗi ∑ |S| ≤ 2 · 105.
- Thời gian chạy: 1000ms.
- Bộ nhớ tối đa: 256MB.
Ví dụ 1
Input
3
{[()]}
{[(])}
(([])){}Output
HOP LE
KHONG HOP LE
HOP LEGiải thích
{[()]}: Các cặp ngoặc mở{,[,(được đóng đúng thứ tự),],}→ Hợp lệ.{[(])}: Dấu[mở trước nhưng lại đóng bằng)trước khi đóng]→ Sai thứ tự lồng nhau.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
