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;
    }
    

      

  • 相关阅读:
    oracle内存粒度
    知乎--软件架构设计 性能系列
    VAMEI 图解的博客
    泰晓科技
    高性能高并发系统的稳定性保障
    如何提高Linux下块设备IO的整体性能?
    Unix操作系统LD_PRELOAD简介
    浅析keepalived vip漂移原理与VRRP协议
    SQL:将查询结果插入到另一个表的三种情况
    C# Graphics中有关绘图质量的几个Mode
  • 原文地址:https://www.cnblogs.com/darkchii/p/9334376.html
Copyright © 2011-2022 走看看