一个关于堆使用的问题,其实学习过关于二叉树,了解过遍历思想的,应该很容易看到此题的时候,朝这个方向思考,LeetCode 20题的原题是:
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.
题目大意是:空格字符串包含着以上的字符'('
, ')'
, '{'
, '}'
, '['
and ']',这些字符需要按照匹配顺序出现,类似“{{[()]}}”等满足要求,不按照匹配顺序则不是正确的顺序。
因此想到了利用堆来解决这个问题,即把每次字符串中国的符号的左含义的符号读入堆中,下一次来的右含义的符号必须严格匹配其左含义的符号
class Solution {
public:
bool isValid(string s) {
int len=s.length();
if(len==0)
return true;
if(len==1)
return false;
stack<char> bracket_str;
int i=0;
while(i<len)
{
if(s[i]=='(' || s[i]=='[' ||s[i]=='{')
{bracket_str.push(s[i]);i++;continue;};
if(s[i]==')' || s[i]==']' ||s[i]=='}')
{
if(bracket_str.empty())
return false;
char temp=bracket_str.top();
if(temp=='(' && s[i]==')' )
{bracket_str.pop();i++;continue;}
else if(temp=='[' && s[i]==']')
{bracket_str.pop();i++;continue;}
else if(temp=='{' && s[i]=='}')
{bracket_str.pop();i++;continue;}
else
return false;
}
}
if(bracket_str.empty())return true;
else return false;
}
};