OJ #378 字符串括号匹配2

news/2024/11/17 0:01:47/

题目描述

​ 给出一个字符串,判断其中的左右括号是否匹配。

​ 注:需同时判断左右圆括号 () ,左右中括号 [],左右大括号 {}

​ 不需要考虑括号之间的优先级的问题,也就是说,小括号包含大括号,也是被允许的。

输入

​ 一行一个字符串,以字符@为结尾。

输出

​ 若匹配,输出 YES,若不匹配,则输出 NO。

样例输入

a(cc[])bbb()@

样例输出

YES

样例输入2

a(cc[)]bbb()@

样例输出2

NO

代码

思路:

  1. 将字符串中的各个括号过滤出来,剔除其他字符。
  2. 字符串比较操作没有数字方便,将对应的括号转换成成对的和相等的数字对,比如1,9 对应字符{ }
  3. 遍历数组把能凑成10的数字对过滤,注意判断数字对的顺序也会影响判断。
  4. 递归如果发现最后数组长度是奇数或者长度为偶数且不再变化说明不符合规则,只有长度为零说明可以按照规则一一配对。
#include <stdio.h>
#include <string.h>char str[305];void func(int bracket_str[], int len) {int leave[305] = {0};int start = 0, right = len, index = 0;int res = 0;while (start < right) {if (start + 1 == right || bracket_str[start] + bracket_str[start + 1] != 10 || bracket_str[start] > bracket_str[start + 1]) {leave[index++] = bracket_str[start++];res++;} else {start += 2;}}if (index == 0) {printf("YES");return;} else {if (index % 2 != 0) {printf("NO");return;} else {if (index == len) {printf("NO");return ;}func(leave, index);}}
}
int main() {scanf("%s", str);int bracket_str[305] = {0};int len = 0;for (int i = 0, j = 0; i < strlen(str); i++) {switch (str[i]) {case '@':break;case '(':bracket_str[j++] = 1;len++;break;case ')':bracket_str[j++] = 9;len++;break;case '[':bracket_str[j++] = 2;len++;break;case ']':bracket_str[j++] = 8;len++;break;case '{':bracket_str[j++] = 3;len++;break;case '}':bracket_str[j++] = 7;len++;break;default:break;}}if (len % 2 != 0 || bracket_str[0] > 3 || bracket_str[len - 1] < 4) {printf("NO");} else {func(bracket_str, len);}return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/568109.html

相关文章

服务器被恶意攻击了怎么办?

随着互联网的迅速发展&#xff0c;网络安全面临着严峻的挑战&#xff0c;一些恶意的服务器攻击行为也层出不穷。无论是正规企业网站、游戏网站、购物网站或是棋牌室、文娱网站&#xff0c;许多用户由于各类攻击使网站溃散&#xff0c;服务器强行关闭&#xff0c;客户不能访问&a…

mac安装unrar解压rar的文件

网上很多都是brew install unrar来进行&#xff0c;但是都失败了&#xff0c;唯独这个链接的方法成功了&#xff0c;记录一下 https://blog.csdn.net/ttanggongzi/article/details/126545890

rar文件

1.创建文件夹 mkdir /usr/local/toolscd /usr/local/tools2.下载、解压软件 wget https://www.rarlab.com/rar/rarlinux-x64-5.6.0.tar.gztar -xvf rarlinux-x64-5.6.0.tar.gz3.安装软件 cd rar make make install4.使用rar软件 #压缩 rar a 被压缩文件位置 存放目录 #解压…

Mac rar解压

Mac解压rar文件 使用homebrew下载rar brew install rar解压 unrar //解压fileName $ unrar x fileName.rar

MacBook安装rar解压工具

MacBook安装rar解压工具 官方下载: https://www.rarlab.com/download.htm 下载包:rarosx-5.6.0.tar.gz#解压 tar -zxvf rarosx-5.6.0.tar.gzvim ~/.zshrc 最后加入 export RAR_HOME/Users/liang/software/rar export PATH$RAR_HOME/:$PATH#使配置生效 source ~/.zshrc#解压命…

linux下安装rar解压包

目录 1. 背景说明 2. widget下载rarlinux 3. tar解压rarlinux 4. make编译 1. 背景说明 默认的情况下&#xff0c;ubuntu等linux系统下是不带解压tar文件的软件工具。最近在网上找到了一个ubuntu系统下解压rar的工具&#xff0c;名字是rarlinux。接下来介绍一下如何安装rar…

在Mac中将文件压缩为.rar格式的最有效方法

BetterZip中包含unrar功能&#xff0c;允许我们打开和提取rar格式压缩文件。如果要创建和保存RAR存档&#xff0c;我们可以从其网站下载并安装rar命令行工具&#xff0c;或者我们也可以告诉BetterZip已安装它的位置。需要注意的是&#xff1a;BetterZip并没有包括RAR许可证&…

Mac上 rar 文件命令解压和压缩

目录 1.安装rar和unrar命令 2.利用rar和unrar压缩和解压文件 1.安装rar和unrar命令 sudo install -c -o $USER rar /usr/local/bin/ &#xff03;安装rar sudo install -c -o $USER unrar /usr/local/bin &#xff03;安装unrar 如果安装失败可以看看/usr/local/bin 目录是…