23/1/30-LeetCode 20: valid parenthese
LeetCode 20: valid parenthese
在数据结构OJ上AC过原题
某人找不到那个OJ的网址了...
思路
运用栈stack来实现 stack简直为其而生
但是当时的stack是我自己实现的,STL的stack操作其实不是很熟练,这道题就顺便把STL库的stack过一下。
实现
class Solution {
public:
bool isValid(string s) {
stack<char> p_match;
//printf("%d\n",s.size());
for(int i = 0; i < s.size(); ++i)
{//printf("for%c\n",s[i]);
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
p_match.push(s[i]);
//printf("%c\n",s[i]);
}
else{
if(p_match.empty()) return false;
char temp = p_match.top();
//printf("%c\n",temp);
//printf("%c\n",s[i]);
switch(temp){
case '(':
if(s[i] != ')') return false;
break;
case '[':
if(s[i] != ']') return false;
break;
case '{':
if(s[i] != '}') return false;
break;
}
p_match.pop();
}
}
if(!p_match.empty()) return false;
return true;
}
};
改进
可以最先判断size是否是偶数!!这样可以在一开始就排除一些离谱情况
但是for里面和最后的empty()都不可以少,分别对应 当前左括号 少于 右括号or右括号 少于 左括号的情况检验。
class Solution {
public:
bool isValid(string s) {
stack<char> p_match;
if(s.size() % 2) return false;
for(int i = 0; i < s.size(); ++i)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
p_match.push(s[i]);
else{
if(p_match.empty()) return false;
char temp = p_match.top();
switch(temp){
case '(':
if(s[i] != ')') return false;
break;
case '[':
if(s[i] != ']') return false;
break;
case '{':
if(s[i] != '}') return false;
break;
}
p_match.pop();
}
}
return p_match.empty();
}
};
bug
- 当时写的时候确实是太久没写了惭愧...把pop()和top()操作都傻傻分不清orz,不过没事,我估计我不会再搞错了哈哈哈
- 我还把switch给忘了捡起来了捡起来了

浙公网安备 33010602011771号