题解 | #有效括号序列#
有效括号序列
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
#include <stack>
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
stack<char> stk;
if(s.size()%2==1){return false;}
for(int i=0;i<s.size();i++){
switch (s[i]) {
case '(':
case '[':
case '{':
stk.push(s[i]);
break;
case ')':
if(stk.empty() || stk.top()!='('){
return false;
}else{
stk.pop();
}
break;
case ']':
if(stk.empty() || stk.top()!='['){
return false;
}else{
stk.pop();
}
break;
case '}':
if(stk.empty() || stk.top()!= '{'){
return false;
}else{
stk.pop();
}
break;
}
}
return stk.empty()?true:false;
}
};
#include <stack>
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
stack<char> s1;
int len = s.size();
if (len % 2 == 1) {
return false;
}
for (int i = 0; i < len; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
s1.push(s[i]);
} else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
if (s1.empty()) {
return false;
} else {
switch (s[i]) {
case ')':
if (s1.top() == '(') {
s1.pop();
break;
} else {
return false;
}
case ']':
if (s1.top() == '[') {
s1.pop();
break;
} else {
return false;
}
case '}':
if (s1.top() == '{') {
s1.pop();
break;
} else {
return false;
}
default:
return false;
}
}
} else {
return false;
}
}
if (s1.empty()) {
return true;
} else {
return false;
}
}
};
这道题目是比较简单的题目,正常来说可能字符串里面还会有其他字符。我自己的解法是比较复杂的,但是这种括号的加减可以直接用switch来实现,效果比较好。注意的是,如果一开始栈空,并且输入的是右边括号)]},那么直接报错就行了。循环结束后,需要保证栈是空的,否则还是会有不匹配的括号,是错误的情况。
查看21道真题和解析