@TOC
前言
简单问题,写的不好,大佬见谅.
如有疏漏,恳请指正,小编垂首.
问题描述:
括号匹配问题
问题解析:
使用栈:
- 发现’(‘和’{',入栈
- 发现’)‘和’}’ 栈顶是否为空? false :判断栈顶是否匹配? 出栈 : false
- 遍历结束, 栈顶是否为空? 有’(‘||’{'未匹配 false : true
实现代码:
代码如下(示例):
#include<iostream>
#include<stack>
using namespace std;
bool Parentheses_matching(string s) {
stack<char> _stack;
for (char ch : s) {
if (ch == '(' || ch == '{') {
_stack.push(ch);
}
if (ch == ')' || ch == '}') {
if (!_stack.empty()) {
if ((_stack.top() == '(' && ch == ')') || (_stack.top() == '{' && ch == '}')) {
_stack.pop();
}
else return false;
//else if ((_stack.top() == '(' && ch != ')') || (_stack.top() == '{' && ch != '}')) {
// return false;
//}
}
else return false;
}
}
if (_stack.empty()) {
return true;
}
else return false;
}
int main() {
char x;
string s = "(){}{( )}"; //true
//string s = "(){}{()}}"; //false
//string s = "(){}{()}{"; //false
//string s = "((){}{()}"; //false
//string s = "()){}{()}"; //false
//string s = "(){**}{()}"; //true
if (Parentheses_matching(s) == true) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
return 0;
}