括号配对问题
2015-06-18 09:07
197 查看
描述现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入
样例输出
#include<stdio.h>
#include<string.h>
#define P printf
#define S scanf
main()
{
int i,j,k,n ,m,f;
char s[10000];
S("%d",&f);getchar();
while(f--){
gets(s);
k=strlen(s);j=0;n=0;
int c=0,d=0;
for(i=0;i<k;i++)
{
if(s[i]=='(')
j++;
else if(s[i]=='[')
n++;
else if(s[i]==')')
c++;
else
d++;
}int w=0,a[10000],v=0;
if(j==c&&n==d)//判断对应的符号数量是否相等
{
for(i=0;i<k;i++)
{
if(s[i]=='('||s[i]=='[')
{
a[w]=s[i];w++;v++;
}
else if(s[i]==')')
{
if(a[w-1]=='(')
{
w--;v--;
}
else {
puts("No");break;}
}
else if(s[i]==']')
{
if(a[w-1]=='[')
{
w--;v--;
}
else {
puts("No");break;}
}
}if(v==0)
puts("Yes");
}
else
P("No\n");}
}
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入
3 [(]) (]) ([[]()])
样例输出
No No Yes 问题分析:本题刚开始可能无从下手,仔细分析后可能会有多种思路,我的思路是先找个变量初始0,遇到‘(’,‘[’加一,遇到')'或者']'并且与前面比对后减一,如果配对则最终会得到0, 参考答案如下:
#include<stdio.h>
#include<string.h>
#define P printf
#define S scanf
main()
{
int i,j,k,n ,m,f;
char s[10000];
S("%d",&f);getchar();
while(f--){
gets(s);
k=strlen(s);j=0;n=0;
int c=0,d=0;
for(i=0;i<k;i++)
{
if(s[i]=='(')
j++;
else if(s[i]=='[')
n++;
else if(s[i]==')')
c++;
else
d++;
}int w=0,a[10000],v=0;
if(j==c&&n==d)//判断对应的符号数量是否相等
{
for(i=0;i<k;i++)
{
if(s[i]=='('||s[i]=='[')
{
a[w]=s[i];w++;v++;
}
else if(s[i]==')')
{
if(a[w-1]=='(')
{
w--;v--;
}
else {
puts("No");break;}
}
else if(s[i]==']')
{
if(a[w-1]=='[')
{
w--;v--;
}
else {
puts("No");break;}
}
}if(v==0)
puts("Yes");
}
else
P("No\n");}
}
相关文章推荐
- 由asp的一个错误,看语言的不同:asp & java
- centos下Unix网络编程的源码的使用问题
- 【剑指offer】面试题12、打印 1 到最大的 n 位数
- chrome 显示图片遇到的问题,与 淘宝图片服务器 缓存 有关系
- navigationcontroller手势翻页和navigationbar
- 平衡车跌倒 雷军能扶起这个阿斗吗?
- Ogre基础教程5:有缓冲输入
- 用位运算实现四则运算之加减乘除
- 谈谈iOS中粘性动画以及果冻效果的实现
- C++ Primer Plus学习笔记三(第四章)
- android端手机测试体系 (转)
- 获取硬件资源
- asp 调用 vb(activex dll) ,参数传递(传引用)需要注意
- easyUI datagrid 查询方法
- Android中的Handler01
- SVN老是清理失败,显示清理乱码
- SVN老是清理失败,显示清理乱码
- linux ddns client ddclient
- oracle 在操作blob该字段是否会产生很多redo
- asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾