华为一个校招题目:
输入一组字符串,其中有普通的字符与括号组成,例如()及[],要求验证括号是否匹配,如果匹配则输出零,不然输出1.
Sample input:dfa(sdf)df[dfds(dfd)]
Sample output:0
解题思路:通过将左括号( [入栈,然后比较与下一个右括号是否匹配。如果匹配,栈执行弹出操作,继续循环;不然跳出,输出1。由于此题只需要检验是否匹配,如果不匹配,直接跳出,不需要接下面的循环。最后,完全匹配,栈为空。
当然,此题也可用数组来解决。思路与栈操作相同。操作较为麻烦,一不小心,容易溢出。
直接用STL栈数据结构解决。
源代码如下:
//() []匹配问题
//() []匹配问题
#include<iostream>
#include<stack>
#include<algorithm>
#include<stdlib.h>
#include<string>
using namespace std;
int main()
{
string s1;
stack<char> s;
//getline(cin,s1);
cin>>s1;
int flag=0;
char first;
for(int i=0;i<s1.size();i++)
{
if(s1[i]=='['||s1[i]=='(')
{
first=s1[i];
break;
}
if(s1[i]==']'||s1[i]==')')
{
first=s1[i];
break;
}
}
if(first==']'||first==')')
flag=1;
else
{
for(int i=0;i<s1.size();i++)
{
if(s1[i]=='['||s1[i]=='(')
s.push(s1[i]);
if(s1[i]==']'||s1[i]==')')
{
s.pop();
}
}
if(!s.empty())
flag=1;
}
cout<<flag<<endl;
system("pause");
return 0;
//return 0;
}