首页 > 试题广场 >

括号配对问题

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

\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 中的括号部分能构成合法括号序列,则输出 `true`;否则输出 `false`。
示例1

输入

abcd(])[efg

输出

false

说明

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

输入

a[x(y)z]

输出

true

说明

提取括号后为 `[()]`,是合法括号序列。
头像 牛客题解官
发表于 2020-06-05 15:35:37
精华题解 题目难度:二星 考察点:栈 方法:字符串 1.分析: 这是一个经典的括号匹配问题,只不过需要入栈的元素由一个变成了两个,而且这个题的题意不是很明确,如果包含除了括号之外的字符也是可以的。我们可以采用如下的步骤进行判断: 0. 首先定义一个栈st,栈所包 展开全文
头像 ciallobit
发表于 2025-05-31 16:39:47
import queue def main(): st = queue.LifoQueue() s = input() n = len(s) for i in range(n): if s[i] == '[' or s[i] == '(': 展开全文
头像 鹿沉
发表于 2025-06-24 23:32:18
def checkOK(): if len(res) == 0 or len(res) % 2 != 0: return 'false' if res[0] == '(' and res[-1] == ']': return 'false' i 展开全文
头像 henuzqjsj
发表于 2025-03-21 11:20:48
import java.util.Scanner; import java.util.Stack; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args 展开全文
头像 Silencer76
发表于 2025-06-10 16:41:23
题目链接 括号配对问题 题目描述 给定一个包含多种字符的字符串 s,你需要判断这个字符串中的括号子序列是否是合法的。合法的括号序列定义如下: 空序列是合法的。 如果 A 是合法的,那么 (A) 和 [A] 也是合法的。 如果 A 和 B 都是合法的,那么 AB 也是合法的。 字符串中只考虑 (, 展开全文
头像 GB279824
发表于 2025-06-08 21:39:13
class Stack: def __init__(self) -> None: self.items = [] def push(self,x): self.items.append(x) def pop(self): 展开全文
头像 5TACK
发表于 2025-06-10 20:12:11
#include <iostream> #include <stack> using namespace std; int main() { string str; stack<char> stk; cin >> str; 展开全文
头像 cchangcs
发表于 2019-08-09 16:40:58
完整代码 s = input() def calc(s): l = [] for e in s: if e =='(' or e == '[': l.append(e) elif e == ']': if len(l) > 0: 展开全文
头像 阿祖拉
发表于 2025-06-17 09:33:25
import java.util.Scanner; import java.util.Stack; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] 展开全文
头像 bandiaoz
发表于 2024-12-20 17:49:43
解题思路 这是一道经典的括号匹配问题,可以使用栈来解决: 遍历字符串中的每个字符 遇到左括号 ([( 时,将其压入栈中 遇到右括号 )] 时,检查栈顶元素是否与当前右括号匹配 如果栈为空或栈顶元素不匹配,返回false 如果匹配,弹出栈顶元素继续处理 最后检查栈是否为空,为空则表示所有括号都 展开全文
头像 冷意
发表于 2025-06-04 21:52:02
#include <iostream> #include <stack> #include <string> #include <vector> using namespace std; bool is_value(const vector<c 展开全文