leetcode 20 有效的括号
前言
题目:20. 有效的括号
参考题解:有效的括号-力扣官方题解
提交代码
思路:使用栈进行括号匹配。
这道题以前我提交过。有趣的是,现在的代码和以前的代码风格不同。
现在提交的代码。代码比较稳妥,偏长。
class Solution {
private:
set<char> all_symbol = {'(',')','{','}','[',']'}; // 需要处理的符号
set<char> left_symbol = {'(','{','['}; // 触发压栈的符号
set<char> right_symbol = {')',']','}'}; // 触发匹配的符号
map<char,char> matchRule = {
{')','('},{'}','{'},{']','['}}; ; // 匹配规则
public:
char matchSymbol(char sym){
// 自行确保传入的sym来自“触发匹配的符号”
return matchRule[sym];
}
bool isValid(string s) {
stack<char> readMatchSymbol;
bool result = true;
for(auto sym : s){
if(all_symbol.count(sym)){ // 判断是否为需要处理的符号
if(left_symbol.count(sym)){ // 是否为需要压栈的符号
readMatchSymbol.push(sym);
}else if(right_symbol.count(sym)){ //是否为需要匹配的符号
if(readMatchSymbol.empty()){
result = false;
break;
}
if(matchSymbol(sym) != readMatchSymbol.top()){
result = false;
break;
}
if(matchSymbol(sym) == readMatchSymbol.top()){
readMatchSymbol.pop();
}
}
}
}
return readMatchSymbol.empty()&&result;
}
};
过去提交的代码。以目的为导向,解决问题先。
class Solution {
private:
map<char,char> parenthes={
{'(',')'},
{'[',']'},
{'{','}'}
};
public:
bool isValid(string str) {
stack<char> s;
for(char tmp : str){
if( parenthes.find(tmp)!=parenthes.end() )
s.push(tmp);
else{
if(!s.empty()){
if( parenthes[s.top()]!=tmp )
return false;
else{
s.pop();
continue;
}
}
else{
return false;
}
}
}
return s.empty()?true:false;
}
};
还没有评论,来说两句吧...