给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
- 输入: "()"
- 输出: true
示例 2:
- 输入: "()[]{}"
- 输出: true
示例 3:
- 输入: "(]"
- 输出: false
示例 4:
- 输入: "([)]"
- 输出: false
思路:
利用栈来解决括号匹配问题。匹配的符号出栈。
//括号匹配
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin,a);
stack<int>s;
for(int i=0;i<a.size();i++)
{
if(a[i]=='(')s.push(')');
else if(a[i]=='[')s.push(']');
else if(a[i]=='[')s.push('}');
else if(s.empty()||s.top()!=a[i]) //如({[]})}或{[((})]
{
cout<<"false"<<endl;
return 0;
}
else s.pop();
}
if (s.empty())cout<<"True"<<endl;
else cout<<"False"<<endl;//如({[]}
return 0;
}