题目描述
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
题解:
用栈来做
用栈来存每个符号的左边,当出现符号右边时,看栈的顶部是否为该符号的左边,如果不能匹配则返回0,能匹配则将栈顶pop
全部结束时栈应该是空的,否则返回0
注意:题目给的数据有可能会先输入符号的右部分,所以当栈为空时也应该压入字符
if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())
没有这个q.empty()会导致段错误
代码:
class Solution {
public:
/** * * @param s string字符串 * @return bool布尔型 */
bool isValid(string s) {
// write code here
stack<char>q;
for(int i=0;i<s.length();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='['||q.empty())
{
q.push(s[i]);
continue;
}
if(s[i]==')'&&q.top()!='(')return false;
else if(s[i]=='}'&&q.top()!='{')return false;
else if(s[i]==']'&&q.top()!='[')return false;
else if(q.empty())return false;
q.pop();
}
if(q.empty())return true;
else return false;
}
};