zoukankan      html  css  js  c++  java
  • nyoj 2

      题目:http://nyoj.top/problem/2

      被strlen()坑了(自己太菜> <),许久没用它,写的时候:l = strlen(br) - 1;。。。。但纠正以后还是WA了,我觉得自己代码没啥毛病(就当AC了吧。。)。

      2018-07-19 10:44:28 发现自己真sb。。。之前代码确实有个小问题,对于']]','))'会输出yes。。。so。。。因为没有做i的判断,所以加上就正确了:

    #include <iostream>
    #include <string.h>
    using namespace std;
    #define M 10001
    int main()
    {
    	char br[M], s[M]; int t, l, i, flag;
    	cin >> t;
    	while (t--)
    	{
    		cin >> br;
    		l = strlen(br);
    		flag = i = 0;
    		if (br[l] == '(' || br[l] == '[' || l == 1)
    			cout << "No" << endl;
    		else {
    			while (l > -1)
    			{
    				switch (br[l])
    				{
    				case ')': s[i++] = br[l]; break;
    				case ']': s[i++] = br[l]; break;
    
    				case '(': switch (s[i - 1])
    						{
    						case ')': i--; break;
    						default: flag = 1; break;
    						}
    						  break;
    				case '[': switch (s[i - 1])
    						{
    						case ']': i--; break;
    						default: flag = 1; break;
    						}
    						  break;
    				}
    				if (flag)
    					break;
    				l--;
    			}
    			if (flag || i)
    				cout << "No" << endl;
    			else
    				cout << "Yes" << endl;
    		}
    	}
    	return 0;
    }
    

      再考虑考虑是否还能再优化一下空间复杂度。。。

      一段不正确的优化代码:

    #include <iostream>
    #include <string.h>
    using namespace std;
    #define M 10001
    int main()
    {
    	char br[M]; int t, l, i, sign, s;
    	cin >> t;
    	while (t--)
    	{
    		cin >> br;
    		l = i = strlen(br);
    		sign = s = 0;
    		if (br[l] == '(' || br[l] == '[' || l == 1)
    			cout << "No" << endl;
    		else {
    			while (i > -1)
    			{
    				switch (br[i])
    				{
    				case ')': s++; break;
    				case ']': s++; break;
    
    				case '(': switch (br[l - s])
    						{
    						case ')': s--; break;
    						default: sign = 1;
    						}
    						  break;
    				case '[': switch (br[l - s])
    						{
    						case ']': s--; break;
    						default: sign = 1;
    						}
    						  break;
    				}
    				if (sign)
    					break;
    				i--;
    			}
    			if (s || i)
    				cout << "No" << endl;
    			else
    				cout << "Yes" << endl;
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    为什么世界上没有安全的工作?
    GIT学习----第六节:撤销修改
    vue-cli中koa输出console.log报错的解决方案
    简易版promise源码实现
    bind函数的模拟实现
    Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
    探寻Object.assign内部的奥秘
    promise基本使用——简单的运动效果
    数组sort方法源码解析
    ES5数组一些常用的方法源码实现
  • 原文地址:https://www.cnblogs.com/darkchii/p/9334376.html
Copyright © 2011-2022 走看看