Code & Func
2017-09-24

恩,照常打个卡(差点忘记)。。。。

由于比较晚才发现要刷个题(捂脸),所以找了个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: ; // pass
12
}
13
}
14
return paren.empty() ;
15
}

突然很嫌弃自己的代码风格!!!

上一条动态