初学栈 遇到的简单括号匹配问题
程序员文章站
2022-05-21 23:31:13
...
题目:题目描述:
现在,有一行括号序列,请你检查这行括号是否配对。
输入描述:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入 数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符
输出描述:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入:
3
[(])
(])
([[]()])
样例输出:
No
No
Yes
答题想法:用top指向栈顶 如果是’(‘或者’[‘则直接入栈 top++ 如果是’)‘或者’]‘则判断是否与栈顶的元素匹配 即是否与top指向的元素匹配(’(‘与’)’ '[‘与’]'匹配 )如果匹配则进行出栈操作 即top–
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char a[100],b[100];
int i, j, k, top = 0, c[6] = {0};
char temp;
int n,flag=2;
scanf("%d", &j);
getchar();
for (k = 0; k < j; k++)
{
scanf("%s", a);
n = strlen(a);
if (n % 2 != 0)//这里判断字符串长度是否为奇数 若为奇数则定不匹配
{
flag = 2;
}
else
{
for (i = 0; a[i]; i++)
{
if (a[i] == '[')//如果为'['入栈
{
b[++top] = a[i];
}
if (a[i] == '(')//如果为'('入栈
{
b[++top] = a[i];
}
if (a[i] == ']')//如果为')'则判断是否匹配
{
temp = a[i];
if (b[top] == '[')
{
top--;
flag = 1;
}
else
{
flag = 2;//如果有一个括号不匹配则就不匹配 循环结束
break;
}
}
if (a[i] == ')')
{
temp = a[i];
if (b[top] == '(')
{
top--;
flag = 1;
}
else
{
flag = 2;
break;
}
}
}
}
c[k] = flag;//将flag的值存进数组中 1 2 分别代表 匹配 不匹配
getchar();
}
for (i = 0; i < k; i++)
{
if (c[i] == 2)
{
printf("NO\n");
}
else if (c[i] == 1)
{
printf("YES\n");
}
}
system("pause");
return 0;
}
上一篇: HDU1728逃离迷宫DFS
推荐阅读