恩,照常打个卡(差点忘记)。。。。
由于比较晚才发现要刷个题(捂脸),所以找了个Easy
的题目——Valid Parentheses
Given a string containing just the characters
'('
,')'
,'{'
,'}'
,'['
and']'
, determine if the input string is valid.The brackets must close in the correct order,
"()"
and"()[]{}"
are all valid but"(]"
and"([)]"
are not.
很经典(很简单)的题目——括号匹配,显然用个栈来完成是最简单的了:
1 bool isValid(string str) {2 stack<char> s;3 for(auto c:str){4 switch(c){5 case '(':case '{': case '[':6 s.push(c);7 break;8 case ')':9 if (s.empty() || s.top() != '(') return false;10 s.pop();11 break;12 case '}':13 if (s.empty() || s.top() != '{') return false;14 s.pop();15 break;10 collapsed lines
16 case ']':17 if (s.empty() || s.top() != '[') return false;18 s.pop();19 break;20 default:21 return false;22 }23 }24 return s.empty()25 }
恩,好像没什么难度,多注意点细节就好了。
做完之后顺手看了一下Discuss
,看了一下别人的实现,同样是c++,同样的方法,为什么别人写的看起来就很舒服呢?
一起来对比一下:
1 bool isValid(string s) {2 stack<char> paren;3 for (char& c : s) {4 switch (c) {5 case '(':6 case '{':7 case '[': paren.push(c); break;8 case ')': if (paren.empty() || paren.top()!='(') return false; else paren.pop(); break;9 case '}': if (paren.empty() || paren.top()!='{') return false; else paren.pop(); break;10 case ']': if (paren.empty() || paren.top()!='[') return false; else paren.pop(); break;11 default: ; // pass12 }13 }14 return paren.empty() ;15 }
突然很嫌弃自己的代码风格!!!