注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Minary_Acdream

http://f10.moe/

 
 
 

日志

 
 

UVA 637 Parentheses Balance  

2012-06-30 10:16:00|  分类: uva |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这道题目我是用vector做的,用栈当然也可以做。

就是在两个循环里去找“()”或者”[]”已经在一起的,把它们erase

最后判断这个动态数组是不是为空即可。若为空,那么就说明匹配,若没有为空,则说明不匹配。

 

 

#include<iostream>

#include<string>

#include<stdio.h>

#include<vector>

using namespace std;

 

vector <char> match;

 

bool pan(int len)

{

   

       int leng = len;

   

       while(1)

       {

              int i = 0;

              int flag = 0;

           while(i < match.size() - 1)

           {

               if((match[i] == '(' && match[i+1] == ')') || (match[i] == '[' && match[i+1] == ']'))

               {

                  match.erase(match.begin() + i);

                  match.erase(match.begin() + i);

                  leng = leng - 2;

                  flag = 1;

                  if(leng == 0) break;           

               }

                  else i++;

           }

           if(leng == 0) break;

           if(!flag) break;

       }

       if(leng == 0) return 1;

       else return 0;

}

int main()

{

    int N;

    cin>>N;

    getchar();  //注意这里的getchar();

    while(N --)

    {

       string str;

       getline(cin,str);

      

       int len = str.length();

      

       for(int i = 0;i < len;i ++)

       {  

           match.push_back(str[i]);

       }

 

             

       if(len == 0 || pan(len)) cout<<"Yes"<<endl;

       else cout<<"No"<<endl;

      

       match.clear();

   

    }

   

}

 

 


  评论这张
 
阅读(453)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018