【暴力】括号匹配问题

博客探讨了如何暴力解决括号匹配问题,包括题目描述、样例输入输出、解决思路和代码实现。方法是遇到未处理的左括号时向前搜索,若出现反套或无法配对则返回非法,结束后还需检查是否有未配对的右括号。
摘要由CSDN通过智能技术生成

题目描述

给出一个括号序列(包含大中小括号),不能反套(即不能小括号里套大括号或中括号,但是正套可以,然后小括号套小括号也是可以的,现在给出一个括号序列,问你它是否合法(不合法要么有反套,要么有不配对

样例输入

6
{[()]()[()]}
()()[()]{[()]}
([])
[(()(] 
()[()]
{()()[]}

样例输出

YES
YES
NO
NO
YES
YES

思路

直接暴力配对(遇见一个没处理过的左括号就一直往后搜,如果出现反套或者最后配对不到就直接输出NO
最后配对完了之后还得再判断有没有右括号是没有被配对的

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;

int len, n;
bool b[1005], pd;
char s[10005];

void work(int x)
{
   
	char cc = s[x], tt = ' ';
	for(int i = x + 1; i <= len; ++i)
	{
   
		if(b[i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式是一种用于匹配和操作字符串的强大工具。在Java中,可以使用java.util.regex包来使用正则表达式。 下面是一些常见的正则表达式操作: 1. 匹配:使用`matches()`方法可以判断一个字符串是否与正则表达式匹配。例如,`str.matches(regex)`会返回一个布尔值,表示字符串str是否与正则表达式regex匹配。 2. 查找:使用`Pattern`和`Matcher`类可以在字符串中查找与正则表达式匹配的子串。首先,使用`Pattern.compile(regex)`方法将正则表达式编译为一个`Pattern`对象,然后使用`pattern.matcher(str)`方法创建一个`Matcher`对象,最后可以使用`matcher.find()`方法进行查找,并使用`matcher.group()`方法获取匹配的子串。 3. 替换:使用`replaceAll(regex, replacement)`方法可以将字符串中与正则表达式匹配的部分替换为指定的字符串。其中,regex是要匹配的正则表达式,replacement是要替换的字符串。 4. 分割:使用`split(regex)`方法可以根据正则表达式将字符串分割成多个子串。例如,`str.split(regex)`会返回一个字符串数组,其中的元素是根据正则表达式regex分割得到的子串。 正则表达式的语法非常灵活,可以用于各种字符串操作。以下是一些常见的正则表达式元字符和语法: 1. 字符类:使用方括号[]表示,可以指定一个字符集合。例如,[abc]表示匹配字符a、b或c中的任意一个。 2. 量词:用于指定匹配的次数。例如,*表示匹配0次或多次,+表示匹配1次或多次,?表示匹配0次或1次。 3. 转义字符:使用反斜杠\来转义特殊字符。例如,\.表示匹配点号。 4. 分组:使用小括号()来分组。例如,(ab)+表示匹配一个或多个连续的"ab"。 5. 预定义字符类:例如,\d表示匹配任意一个数字字符,\w表示匹配任意一个字母、数字或下划线。 6. 边界匹配:例如,^表示匹配字符串的开头,$表示匹配字符串的结尾。 以上只是正则表达式的一些基本概念和语法,实际应用中还有更多的用法和技巧。如果你有具体的正则表达式需求,请提供更详细的问题描述,我将尽力帮助你解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值