给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
此问题的核心是理解规则,用一句最简单的话描述:在遍历数据的过程中,每遇到一个右符号(") ] }”),如果此符号往前遍历过的最后一个左符号("( [ {"),两者是对应的,表示这两个符号是有效的。
转化为代码逻辑,最适合使用的即为栈,遇到左符号入栈,遇到右符号时查询栈顶元素是否为对应左符号,是则出栈,继续遍历。否则返回false。
class Solution {
public:
bool isValid(string s) {
stack <char> Parentheses;
unsigned int i = 0;
for(i = 0; i < s.size(); i ++)
{
if((s[i] == '(') || (s[i] == '[') || (s[i] == '{'))
{
Parentheses.push(s[i]);
}
else
{
if(Parentheses.empty())
{
return false;
}
if(((s[i] == ')') && (Parentheses.top() == '('))
||((s[i] == ']') && (Parentheses.top() == '['))
||((s[i] == '}') && (Parentheses.top() == '{'))
)
{
Parentheses.pop();
}
else
{
return false;
}
}
}
return Parentheses.empty();
}
};