zoukankan      html  css  js  c++  java
  • 括号配对问题http://acm.nyist.net/JudgeOnline/problem.php?pid=2

     

    括号配对问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    现在,有一行括号序列,请你检查这行括号是否配对。
     
    输入
    第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
    输出
    每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
    样例输入
    3
    [(])
    (])
    ([[]()])
    样例输出
    No
    No
    Yes
    我的代码:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define MAX 10000
    int main()
    {
    	char a[MAX+10],b[MAX+10];
    	int n;
    	scanf("%d",&n);
    	while(n--)
    	{
    		int l,i,p,top=1;
    		memset(a,0,sizeof(a));
    		memset(b,0,sizeof(b));
    		scanf("%s",a);
    		l=strlen(a);	
    		for(i=0;i<l;i++)
    		{
    			p=1;
    			if(a[i]=='('||a[i]=='[')
    			{
    				if(a[i]=='(')
    				{	b[top]=')';
    					top++;
    				}
    				else
    				{
    					b[top]=']';
    					top++;
    				}
    			}
    			else if(a[i]==')'||a[i]==']')
    			{
    
    				if(b[top-1]==a[i])
    					top--;
    				else if(b[top-1]!=a[i])
    				{
    					p=0;
    					break;
    				}
    			}
    			if(i==l-1&&top!=1)
    			{
    				p=0;
    				break;
    			}
    		}
    		if(p==1)
    			printf("Yes
    ");
    		else
    			printf("No
    ");
    	}
    	return 0;
    }
    

    其实输出结果时还可以写成printf("%s ",p?"Yes":"No");
    我同学的:

    # include <stdio.h>
    # include <string.h>
    int main()
    {
    	char s[11000],s1[11000];
    	int N,l,top,i;
    	scanf("%d",&N);
    	while(N--)
    	{
    		memset(s,0,sizeof(s));
    		memset(s1,0,sizeof(s1));
    		scanf("%s",s);
    		l=strlen(s);
    		top=2;
    		for(i=0,top=2;i<l;i++)
    		{
    			s1[top++]=s[i];
    			while(s1[top-1]-s1[top-2]==1||s1[top-1]-s1[top-2]==2)
    			{
    				top=top-2;
    			}
    		}
    		if(top<=2)
    			printf("Yes
    ");
    		else
    			printf("No
    ");
    	}
    	return 0;
    }
    

     这是一道有意思的题,主要还是运用栈的原理做的。

  • 相关阅读:
    [POI2014]KUR-Couriers
    [题解向] Luogu4092 [HEOI2016/TJOI2016]树
    [探究] OI中各种初级数论算法相关
    [SCOI2005]骑士精神
    [intoj#7]最短距离
    数列分块入门
    动态规划问题基础
    Luogu P1967 货车运输
    Luogu P3379 【模板】最近公共祖先(LCA)
    Luogu P3378 【模板】堆
  • 原文地址:https://www.cnblogs.com/wangyouxuan/p/3248685.html
Copyright © 2011-2022 走看看