题目大意:匹配括号,查看给出的字符串中的括号是否是合法匹配的,()[]{}
分析:栈的应用。
代码:
首次代码:if-else的结构来判定
#include <stack>
class Solution {
public:
bool isValid(string s) {
stack<char> par;
for (int i = 0;i < s.length();i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
par.push(s[i]);
}
else {
if (par.empty()) return false;
char tmp = par.top();
par.pop();
if (tmp == '(' && s[i] != ')')
return false;
else if (tmp == '[' && s[i] != ']')
return false;
else if (tmp == '{' && s[i] != '}')
return false;
}
}
if (par.empty()) return true;
else return false;
}
};
另一版代码:选择用switch-case来判断
class Solution {
public:
bool isValid(string s) {
int state = 1, i = 0;
stack<char> par;
while (i<s.length() && state)
switch (s[i]) {
case '[':
case '(':
case '{':
par.push(s[i]);
//push the open character onto stack
i++;
break;
case ')':
if (!par.empty() && par.top() == '(') {
par.pop(); i++;
}
else
state = 0; //an error occurs
break;
case ']':
if (!par.empty() && par.top() == '[') {
par.pop(); i++;
}
else
state = 0; // an error occurs
break;
case '}':
if (!par.empty() && par.top() == '{') {
par.pop(); i++;
}
else
state = 0; // an error occurs
break;
default:
i++; break;
} //end of while
if (state && par.empty()) return 1;
else return 0;
}
};