Kiểm tra tính hợp lệ của dấu ngoặc - bài 1¶
Tóm lược nội dung
Bài này trình bày bài toán kiểm tra các cặp ngoặc đơn bằng cấu trúc ngăn xếp.
Bài toán¶
Yêu cầu:
Viết chương trình kiểm tra tính cân bằng (tính hợp lệ) của các cặp ngoặc trong một biểu thức.
Biết rằng chuỗi này chỉ chứa dấu ngoặc đơn ().
Ví dụ:
(()) → Hợp lệ
(() → Không hợp lệ
Đầu vào:
Một chuỗi là biểu thức toán học có chứa dấu ngoặc.
Đầu ra:
Thông báo hợp lệ hoặc không hợp lệ.
Bộ kiểm thử:
| Đầu vào | Đầu ra |
|---|---|
| ((a + b) * (c - d)) | Hợp lệ |
Cách giải đề xuất¶
Ý tưởng chính
Duyệt từng ký tự trong chuỗi biểu thức:
- Nếu ký tự đang xét là ngoặc mở
(thì nạp vào ngăn xếp nhằm đánh dấu một cặp chưa hoàn chỉnh. -
Nếu ký tự đang xét là ngoặc đóng
)thì loại bỏ phần tử ở đỉnh của ngăn xếp. Vì phần tử đỉnh chính là một ngoặc mở(tương ứng.Nếu không còn phần tử nào để loại bỏ, nghĩa là không còn ngoặc mở
(tương ứng, dư thừa ngoặc đóng), thì không hợp lệ.
Sau khi duyệt hết chuỗi biểu thức, nếu ngăn xếp không còn phần tử nào thì hợp lệ. Ngược lại, vẫn còn phần tử, chính là các ngoặc mở (, thì không hợp lệ.
Viết chương trình
1. Nạp lớp LifoQueue của module queue.
2. Viết hàm is_balanced_parentheses() dùng để kiểm tra tính hợp lệ (tính cân bằng) của các ngoặc trong một chuỗi biểu thức.
Hàm này gồm một tham số là chuỗi biểu thức expression cần kiểm tra.
Giá trị trả về là True hoặc False, tương ứng với hợp lệ hoặc không hợp lệ.
Hàm hoạt động như sau:
- Khởi tạo ngăn xếp
stackrỗng. -
Dùng vòng lặp duyệt từng ký tự
ctrong chuỗi biểu thứcexpression:- Nếu
clà(là nạp vàostack. -
Nếu
clà)thì:- Kiểm tra
stack, nếu rỗng thì trả vềFalse. - Ngược lại, không rỗng, thì loại bỏ phần tử đỉnh.
- Kiểm tra
- Nếu
-
Kết thúc vòng lặp:
- Nếu
stackrỗng thì trả vềTrue. - Nếu
stackcòn phần tử thì trả vềFalse.
- Nếu
3. Viết chương trình chính:
- Cho người dùng nhập vào một chuỗi biểu thức.
- Gọi hàm
is_balanced_parentheses()ra thực hiện.
Mã nguồn¶
Code đầy đủ được đặt tại: