• NYOJ 2 括号配对问题


    链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2

    经典的问题,用栈解决。

    发现如果括号配对的话,栈顶的元素肯定与当前读入的元素匹配。如果出现一次不匹配的情况,直接break输出No即可。

     
    #include <stdio.h>
    #include <string.h>
    char data[10002];
    char stack[10000];			//栈
    int s_top;					//栈顶指针
    
    int s_pop(void)		
    {
    	return stack[s_top--];
    }
    
    void s_push(char c)
    {
    	stack[++s_top]=c;
    }
    
    int main()
    {
    	int n;
    	int i;
    	bool ans;
    	scanf("%d",&n);
    	while(n--)
    	{
    		memset(data,'',sizeof(data));
    		scanf("%s",data);
    		for (i=0;i<strlen(data);i++)			//把所有的字符串扫描一遍
    		{
    			if(data[0]==')'||data[0]==']')
    			{
    				ans=false;
    				break;
    			}
    			if(data[i]=='('||data[i]=='['||s_top==0)
    				s_push(data[i]);
    			if(data[i]==')')
    			{
    				if(s_pop()=='(')
    					ans=true;			//当前这一层处理完 ,匹配
    				else
    				{
    					ans=false;			//在当前这一层出现不匹配情况
    					break;
    				}
    			}
    			if(data[i]==']')
    			{
    				if(s_pop()=='[')
    					ans=true;
    				else
    				{
    					ans=false;
    					break;
    				}
    			}
    			
    
    		}
    		ans?printf("Yes
    "):printf("No
    ");
    	}
    	return 0;
    }        


     

  • 相关阅读:
    nginx编译安装
    使用scp命令,不同服务器之间拷备文件
    cpu负载过高排查与解决
    Docker安装
    sftp安装
    nginx登陆验证 [done]
    git常用命令
    python常见问题记录
    升级openssl
    rsync使用
  • 原文地址:https://www.cnblogs.com/frankM/p/4399557.html
Copyright © 2020-2023  润新知