括号配对问题
来源:互联网 发布:java传递参数基本类型 编辑:程序博客网 时间:2024/06/05 21:03
题目:
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
- 输入
- 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
- 输出
- 每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
- 样例输入
3[(])(])([[]()])
- 样例输出
NoNoYes
- 来源
- 网络
- 上传者
naonao
心得:代码写好后经常要检查括号是否匹配,我总是从里往外检查,如下面这一行括号[()[]([])],我的检查顺序如下[()[]([])]--->[[]([])]--->[([])]--->[()]--->[]---> 。其过程即为寻找最里层匹配的,即相邻位是相匹配的括号,然后删除这对括号,重复以上动作,若找不到相匹配的,则整个字符串中的括号都不匹配。
代码<C语言>
#include<stdio.h>
#include<string.h>
int main()
{
char a[10005];
int n,k,m,i;
scanf("%d",&m);//输入循环的次数
while(m--)
{
scanf("%s",&a);//输入字符串
n=strlen(a);//字符串长度,不包括'\0'
if(n%2!=0)//如果字符串长度是奇数
{
printf("No\n");
}
else{
do{
k=-1;//每次都初始化k为-1
for(i=0;i<n-1;i++)//遍历数组
{
if((a[i]=='('&&a[i+1]==')')|| (a[i]=='['&&a[i+1]==']'))//如果相邻位匹配
{
k=i;//标记一下位置
break;
}
}
if(k<n-1&&k!=-1)//表示k是被标记过的
{
for(i=k;i<n-2;i++)//在k的位置向前挪两位,即覆盖这两个匹配成功的括号
{
a[i]=a[i+2];
}
n=n-2;//新的字符串的长度减少2个
}
else//找不到相邻位匹配的
{printf("No\n");
break;},结束循环
}while(n!=0);//当字符串中字符个数不为0时
if(n==0)
printf("Yes\n");
}
}
return 0;
}AC情况:
阅读全文
0 0
- 括号配对问题
- 括号配对问题
- 括号配对问题
- 括号配对问题
- 括号配对问题
- NYOJ - 括号配对问题
- nyoj 括号配对问题
- 括号配对问题
- 括号配对问题
- 括号配对问题
- 括号配对问题
- [ACM]括号配对问题
- NYOJ2 括号配对问题
- 括号配对问题
- 2 括号配对问题
- 括号配对问题
- 括号配对问题
- 【括号配对问题 2】
- 宏、函数、宏函数的区别
- Mysql中文模糊查询问题
- JS多物体透明度运动
- 经典WebView加载HTML布局示例
- Android 的网络请求需要开辟子线程的原因 +程序实例
- 括号配对问题
- 王学岗ToolBar,DrawLayout+Navigation的使用(二)
- 算法训练 字符串逆序
- 炮兵阵地 POJ
- 两两交换链表中的节点
- 全栈(FullStack)工程师指南
- emWin 2天速成实例教程003_Framewin和Window窗口控件和2D绘图
- C#多线程之二:ManualResetEvent和AutoResetEvent
- linux内核中断