(20)Valid Parentheses
题目:判断一个字符串是否符合括号使用规则,字符串里有”()”,”[]”,”{}”三种。
例子:”()”和”({}[])”都是正确的,但是”([)”,”({)[}]”都是错误的。
想过之后,觉得直接用栈就可以实现整个字符串的查找,从头搜索,如果搜到的符号是左符号,那么就压入栈中,如果是右符号,那么如果栈是空,那么就直接返回错误,如果不是的话,栈顶必须是次符号的左符号,不然也是错误的,如果是对的那就出栈,最后如果栈是空的,那么就是对的,不是空就证明未闭合,是错误的。
下面是代码:
class Solution {
public:
bool isValid(string s) {
stack<string> str_c;
int len = s.size();
int i = 0;
for (i = 0; i < len; i++){
string str = s.substr(i, 1);
if(str.compare("(") == 0 || str.compare("[") == 0 || str.compare("{") == 0){
str_c.push(str);
}
else if(str.compare("}") == 0 && !str_c.empty()){
if(str_c.top().compare("{") == 0){
str_c.pop();
}
else{
return false;
}
}
else if(str.compare("]") == 0 && !str_c.empty()){
if(str_c.top().compare("[") == 0){
str_c.pop();
}
else{
return false;
}
}
else if(str.compare(")") == 0 && !str_c.empty()){
if(str_c.top().compare("(") == 0){
str_c.pop();
}
else{
return false;
}
}
else{
return false;
}
}
if(str_c.empty()){
return true;
}
return false;
}
};