首页 > 试题广场 >

括号配对问题

[编程题]括号配对问题
  • 热度指数:11819 时间限制: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

说明

提取括号后为 `[()]`,是合法括号序列。
头像 牛客题解官
发表于 2020-06-05 15:35:37
精华题解 题目难度:二星 考察点:栈 方法:字符串 1.分析: 这是一个经典的括号匹配问题,只不过需要入栈的元素由一个变成了两个,而且这个题的题意不是很明确,如果包含除了括号之外的字符也是可以的。我们可以采用如下的步骤进行判断: 0. 首先定义一个栈st,栈所包 展开全文
头像 BraveCoder
发表于 2025-07-31 16:43:51
import java.util.Scanner; import java.util.Stack; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args 展开全文
头像 潜水a
发表于 2025-09-11 22:01:11
#include <iostream> #include<stack> using namespace std; stack<char>a,b,c; int main() { string s; cin >> s;int l=s.len 展开全文
头像 MOGUGU
发表于 2025-07-30 14:38:20
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100000 typedef struct { 展开全文
头像 抖音佳佳子_zZ
发表于 2025-08-10 16:36:02
维护一个字符栈存放左括号。遍历字符串,左括号压入栈中,遇到右括号弹出栈首字符配对,不是一对直接返回false。最后当栈为空时(没有多余符号),返回true。 #include <iostream> #include <stack> using namespace std; 展开全文
头像 ciallobite
发表于 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] == '(': 展开全文
头像 HNU_DHG
发表于 2025-09-30 16:04:02
S=list(input()) Stack=[] flag=True def match(left:str,right:str) ->bool: all_lefts="([" all_rights=")]" return all_ 展开全文
头像 ZYCwuque
发表于 2025-08-19 17:19:00
import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class Main { public static void main(String[] args) { 展开全文
头像 何成95
发表于 2025-08-31 19:13:16
s = input() def getresult(s): stack = [] for c in s: if c=='(' or c=='[' or c=='{':#正括号入栈 stack.append(c) elif c= 展开全文
头像 牛客67601021号
发表于 2025-10-05 13:31:55
s=input() l=[0,0,0] su=0 flag=0 for ch in s: if ch=='[': l.append(1) elif ch==']': if(l[-1]!=1): flag=1 展开全文
头像 鹿沉
发表于 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 展开全文