11.3Valid Parentheses栈和队列
题目描述
给定一个只由左右原括号、花括号和方括号组成的字符串,求这个字符串是否合法。合法的定义是每一个类型的左括号都有一个右括号与之一一对应。且括号内的字符串也满足此要求。
输入输出样例
Input :"{ [] }()"
Output:true
题解
括号匹配是典型的使用栈来解决的问题。我们从左往右遍历,每当遇到左括号便放入栈内,遇到右括号则判断其和栈顶的括号是否是统一类型,是则从栈内取出左括号,否则说明字符串不合法。
cpp
#include <iostream>
#include <stack>
using namespace std;
bool isValid(string s) {
stack<char> parsed;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '{' || s[i] == '[' || s[i] == '(') {
parsed.push(s[i]);
}
else {
if (parsed.empty()) {
return false;
}
char c = parsed.top();
if ((s[i] == '}' && c == '{') ||
(s[i] == ']' && c == '[') ||
(s[i] == ')' && c == '(')) {
parsed.pop();
}
else {
return false;
}
}
}
return parsed.empty();
}
int main() {
string s = "{[]}()";
if (isValid(s)) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
return 0;
}