您的位置:首页 > 其它

[LeetCode]Valid Parentheses

2015-07-21 17:49 281 查看
解题思路:
边界条件:stack是空,取到rightSet里面的字符,false;或者遍历str结束后,stack不为空,也是false
前条件:leftSet, rightSet, matchPair
不变式:遍历s,找到没match的pair,false
结束条件:遍历s结束

class Solution {
public:
set<char> leftSet;
set<char> rightSet;
unordered_map<char, char> matchPair;

Solution(){
leftSet.insert('(');
leftSet.insert('[');
leftSet.insert('{');

rightSet.insert(')');
rightSet.insert(']');
rightSet.insert('}');

matchPair['('] = ')';
matchPair['['] = ']';
matchPair['{'] = '}';
}
bool isValid(string s) {
if (s.length() == 0)    return true;

stack<char> parentStack;
for (int i = 0; i < s.length(); ++i){
if (isInLeftSet(s[i])){
parentStack.push(s[i]);

}else if (isInRightSet(s[i])){
if(parentStack.empty()){
return false;
}

char temp = parentStack.top();
if (isMatch(temp, s[i])){
parentStack.pop();
}else{
return false;
}
}else{
printf("invalid input.");
}
}
if (!parentStack.empty()){
return false;
}

return true;
}

bool isMatch(char left, char right){
if (matchPair.find(left) != matchPair.end()){
return matchPair[left] == right;
}else{
printf("invalid input");
}
return false;
}

bool isInLeftSet(char c){

return (leftSet.find(c) != leftSet.end()) ?  true : false;
}

bool isInRightSet(char c){

return (rightSet.find(c) != rightSet.end()) ? true : false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: