首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ACM在线练习-括号配对有关问题

2013-03-12 
ACM在线练习-括号配对问题发现一个,保持自己编码战斗力的练习场,南阳理工学院的在线ACM系统。有兴趣的同学,

ACM在线练习-括号配对问题

发现一个,保持自己编码战斗力的练习场,南阳理工学院的在线ACM系统。

有兴趣的同学,可以注册一个,每天练习一题,题目不难的。

原题见:http://acm.nyist.net/JudgeOnline/problem.php?pid=2

括号配对问题
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3[(])(])([[]()])
样例输出
NoNoYes


我的程序,采用语言c++。

思路:将未匹配字符入栈,没当有匹配字符,出栈。最后检测栈是否为空即可。

源码已经过在线系统验证。

SyntaxMatch.cpp

#include <iostream>#include <vector>using namespace std;int main(void){  int nLineNum = 0;  cin>>nLineNum;  if(nLineNum<0 || nLineNum>100)  {    cout<<"Please input number 0<n<=100."<<endl;    return 1;  }    vector<string> vInputList;  for(int i=0; i<nLineNum; ++i)  {    string sInputStr="";    cin>>sInputStr;        if(sInputStr.size() == 0)    {      cout<<"Error:Input string is empty."<<endl;      --i;      continue;    }        if(sInputStr.size() >=10000)    {      cout<<"Error:Input string is too long."<<endl;      --i;      continue;    }        vInputList.push_back(sInputStr);  }    vector<string>::iterator vIter = vInputList.begin();  for(; vIter != vInputList.end(); ++vIter)  {    string sUnMatch="";    string sInput=*vIter;    string::iterator sIter = sInput.begin();    for(; sIter != sInput.end(); ++sIter)    {      char cCurChar = *sIter;      if(sUnMatch.empty())      {        sUnMatch.push_back(cCurChar);      }      else      {        string::iterator sEndIter = sUnMatch.end() - 1;        char cEndChar=*sEndIter;        if((cEndChar=='[' && cCurChar==']')          ||(cEndChar=='(' && cCurChar==')'))        {          sUnMatch.erase(sEndIter);        }        else        {          sUnMatch.push_back(cCurChar);        }      }    }        if(sUnMatch.empty())    {      cout<<"Yes"<<endl;    }    else    {      cout<<"No"<<endl;    }  }  return 1;}

热点排行