给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 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;
}

该博客介绍了一个有效的字符串括号匹配问题的解决方案,通过使用栈数据结构。程序读取输入的字符串,遇到左括号时将其对应的右括号压入栈中,遇到右括号则检查栈顶元素是否匹配,不匹配或栈为空则返回错误。遍历完成后,如果栈为空则表示字符串有效,否则无效。示例展示了有效和无效的括号组合。
1万+

被折叠的 条评论
为什么被折叠?



