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.
题意:
给出一个只有'(‘ ')' '[' ']' '{' '}' 的字符串,判断字符串是否是合法的,合法的定义就是是每个括号都是配对的,可以嵌套。但是“([)]”就不是合法的。
分析:
使用一个符号栈读入字符串,那么如果匹配就会发生在栈顶和即将读入的字符。这时就弹出栈顶,否则就读入。直到所有字符都读入。如果栈不为空则不是合法的。
代码:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(int i = 0 ; i < s.length() ; i ++){
if(stk.size())
{
char c = stk.top();
if(c == '(' && s[i] == ')')stk.pop();
else if(c == '[' && s[i] == ']')stk.pop();
else if(c == '{' && s[i] == '}')stk.pop();
else stk.push(s[i]);
}
else
stk.push(s[i]);
}
return stk.size()==0;
}
};