Chúng tôi gọi một nhóm parens là paren mở (
, paren gần giống với nó )
và mọi thứ bên trong chúng.
Một nhóm Parens hoặc chuỗi được gọi là parenthesly cân nếu nó có chứa một trong hai không có gì hoặc chỉ có 2 sự cân parenthesly nhóm Parens.
Ví dụ:
The string "(()())()" is parenthesly balanced
( )() Because it contains exactly 2 parenthesly balanced parens groups
()() The left one is parenthesly balanced because it contains 2 parenthesly balanced parens groups (balanced because they are empty). The right one is parenthesly balanced because it contains nothing.
Tương tự như vậy:
The string "(()(()))()" is not parenthesly balanced
( )() Because it contains a parens group that is not parenthesly balanced: the left one
()( ) The left one is not balanced because it contains a parens group that is not balanced: the right one
() The right one is not balanced because it only contains one balanced group.
Vì vậy, một chuỗi cân bằng ngoặc hoặc nhóm parens nên:
- Không chứa gì cả.
- Hoặc chỉ chứa và chính xác 2 nhóm parens cân bằng ngoặc đơn. Nó không chứa gì khác.
Bài tập:
Nhiệm vụ của bạn là viết một hàm hoặc chương trình kiểm tra xem một chuỗi đã cho có phải là một chuỗi cân bằng hay không.
Đầu vào:
Đầu vào sẽ là một chuỗi hoặc danh sách các ký tự hoặc một cái gì đó tương tự. Bạn có thể giả định rằng chuỗi sẽ chỉ bao gồm các ký tự '('
và ')'
. Bạn cũng có thể giả định rằng mỗi mở paren (
sẽ phải phù hợp với paren gần của nó )
, do đó, không lo lắng về chuỗi như "((("
hoặc ")("
hoặc "(())("
...
Lưu ý: Như đã đề cập bởi @DigitalTrauma ở dưới bình luận của mình, đó là ok để subtitute sự ()
kết hợp của các nhân vật khác (ví dụ như <>
, []
, ...), nếu nó gây ra việc bổ sung như thoát trong một số ngôn ngữ
Đầu ra:
Bất cứ điều gì để báo hiệu cho dù chuỗi có cân bằng ngoặc hay không (đúng hay sai, 1 hoặc 0, ...). Vui lòng bao gồm trong câu trả lời của bạn những gì chức năng / chương trình của bạn dự kiến sẽ mang lại.
Ví dụ:
"" => True
"()()" => True
"()(()())" => True
"(()(()(()())))(()())" => True
"(((((((()())())())())())())())()" => True
"()" => False
"()()()" => False
"(())()" => False
"()(()(())())" => False
"(()())(((((()())()))())())" => False
"()(()()()())" => False
"()(()(()())()())" => False
Hai ví dụ cuối cùng thực sự tạo ra sự khác biệt!
May mắn nhất!
"(()())()"
sẽ được đại diện là [0, 0, 1, 0, 1, 1, 0, 1]
. Điều này sẽ loại bỏ sự cần thiết phải chuyển đổi đầu vào thành mã ký tự và sau đó trừ đi.