关键词 栈 先进后出数据结构
001 只有一种括号解法
// 当字符串本来就是空的时候,我们可以快速返回true
if (s.empty()) {
return true;
}
// 当字符串长度为奇数的时候,不可能是一个有效的合法字符串
if (s.length() % 2 == 1) {
return false;
}
// 消除法的主要核心逻辑:
stack<char> t;
for (size_t i = 0; i < s.length(); i++) {
// 取出字符
char c = s[i];
if (c == '(') {
// 如果是'(',那么压栈
t.push(c);
} else if (c == ')') {
// 如果是')',那么就尝试弹栈
if (t.empty()) {
// 如果弹栈失败,那么返回false
return false;
}
t.pop();
}
}
return t.empty();
002 多种括号解法
if (s.empty()) {
return true;
}
stack<char> t;
for (size_t i =0; i<s.length(); i++) {
char cc = s[i];
if (cc == '(' || cc == '{' || cc == '[') {
t.push(cc);
}else if(!t.empty() && (t.top() == cc-1 || t.top() == cc-2)){//这里可以通过ASCII编码值进行比较
t.pop();
}else{
return false;
}
}
return t.empty();