输入一个只包含 (和)的字符串 个(只能匹配一个 ),但一个( 必须出现在 )之前。请判断这个字符串能否括号完全匹配,如果能,输出YES(匹配的括号不可以交叉),否则输出NO”
时间: 2024-02-12 21:02:36 浏览: 23
好的,这是一个经典的括号匹配问题,可以用栈来解决。以下是解决方案:
1. 初始化一个空栈。
2. 从左到右遍历字符串中的每一个字符:
a. 如果当前字符是左括号 (,则将其压入栈中。
b. 如果当前字符是右括号 ),则取出栈顶的字符,如果栈为空或者栈顶字符不是左括号,则说明括号不匹配,返回 NO。
3. 如果遍历完字符串后栈为空,则说明括号匹配,返回 YES,否则返回 NO。
代码实现如下(使用 Python 语言):
```python
def is_matching_parentheses(s):
stack = []
for c in s:
if c == '(':
stack.append(c)
elif c == ')':
if not stack or stack[-1] != '(':
return 'NO'
stack.pop()
return 'YES' if not stack else 'NO'
```
可以通过以下代码测试函数是否正确:
```python
assert is_matching_parentheses('(())') == 'YES'
assert is_matching_parentheses('(())()') == 'YES'
assert is_matching_parentheses('(()())()') == 'YES'
assert is_matching_parentheses('())(') == 'NO'
assert is_matching_parentheses('(()')) == 'NO'
```
希望能够解决您的问题!
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)