Problem: 20. 有效的括号
文章目录
题目描述
思路
1.每次遇到左括号将其压入栈顶;
2.遇到右括号:
2.1.先判断当前栈是否为空,若为空则说明不合法;
2.2.弹出当前栈顶元素与当前的右括号配对,若不相互配对,则不合法;
3.最后判读栈是否为空,为空则合法,否则不合法.
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为字符串s的长度
空间复杂度:
O ( n ) O(n) O(n)
Code
cpp
class Solution {
public:
/**
* Valid bracket
*
* @param s The given parenthesis string
* @return bool
*/
bool isValid(string s) {
stack<char> stack;
int len = s.length();
for (int i = 0; i < len; ++i) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
stack.push(s[i]);
} else {
if (stack.empty()) {
return false;
} else {
char temp = stack.top();
stack.pop();
if (s[i] == ')' && temp != '(') {
return false;
}
if (s[i] == ']' && temp != '[') {
return false;
}
if (s[i] == '}' && temp != '{') {
return false;
}
}
}
}
return stack.empty() ? true : false;
}
};