首页 > 试题广场 >

括号配对问题

[编程题]括号配对问题
  • 热度指数:10569 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个字符串 S,请检查字符串中仅由括号字符 \texttt{`['}\texttt{`]'}\texttt{`('}\texttt{`)'} 组成的子序列是否构成合法括号序列。合法括号序列的定义如下:

\hspace{23pt}\bullet\,空序列是合法括号序列;

\hspace{23pt}\bullet\,如果 A 是合法括号序列,则 `(A)` 和 `[A]` 都是合法括号序列;

\hspace{23pt}\bullet\,如果 AB 都是合法括号序列,则它们的拼接 AB 也是合法括号序列。

\hspace{15pt}字符串 S 可能包含其他字符,但只需考虑括号部分,忽略其他字符。

输入描述:
\hspace{15pt}在一行中输入一个字符串 S,长度 1 \leqq |S| \leqq 10^4,由可见字符组成。


输出描述:
\hspace{15pt}如果字符串 S 中的括号部分能构成合法括号序列,则输出 \texttt{true};否则输出 \texttt{false}
示例1

输入

abcd(])[efg

输出

false

说明

提取括号 `(`、`)`、`[`、`]` 后为 `(])[`,不是合法括号序列。
示例2

输入

a[x(y)z]

输出

true

说明

提取括号后为 `[()]`,是合法括号序列。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
s = list(input())
stack = []
ifs == '':
    print('true')
else:
    fori in range(len(s)):
        ifs[i] == '('or s[i] == '[':
            stack.append(s[i])
        ifs[i] == ')':
            iflen(stack) != 0 and stack[-1] == '(':
                stack.pop(-1)
            else:
                # print('false')
                stack.append(s[i])
                # break
        ifs[i] == ']':
            iflen(stack) != 0and stack[-1] == '[':
                stack.pop(-1)
            else:
                # print('false')
                stack.append(s[i])
                # break
    iflen(stack) == 0:
        print('true')
    else:
        print('false')
发表于 2025-07-25 11:17:41 回复(0)
s = input()
stack = []
for i in s:
    if i=="("&nbs***bsp;i=="[":
        stack.append(i)
    elif i==")" :
        if stack!=[] and stack[-1]=="(":
            stack.pop()
        else:
            print("false")
            exit(0)
    elif i=="]":
        if stack!=[] and stack[-1]=="[":
            stack.pop()
        else:
            print("false")
            exit(0)
print("true")

发表于 2025-06-22 01:11:03 回复(0)
class Stack:
    def __init__(self) -> None:
        self.items = []
    def push(self,x):
        self.items.append(x)
    def pop(self):
        if self.items:
            return self.items.pop()
        return None
    def is_empty(self):
        return len(self.items) == 0

def is_match(s):
    stack = Stack()
    for char in s:
        if char in "([":
            stack.push(char)
        elif char in ")]":
            if not stack:
                return False
            top = stack.pop()
            if (char == ")" and top != "(")&nbs***bsp;(char == ']' and top != "["):
                return False
    return stack.is_empty()

s = input().strip()
print(str(is_match(s)).lower())

发表于 2025-06-08 21:38:59 回复(0)