题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
示例: 输入:s = "()[]{}" 输出:true 输入:s = "([)]" 输出:false
解题思路:在解决这个问题的时候,我们通常要引入栈来辅助我们解决问题。栈的特性是先进后出, 最后进来的数永远是在栈顶的,也是我们可以取到的数,正好就和有效括号这个问题相适应。解题思路如下图:
代码实现:
bool isValid(string s)
{
stack <char> tmp;
for (int i = 0; i < s.size(); i++)
{
if (!tmp.empty())
{
if (s[i] == ')'&&tmp.top() == '(' ||
s[i] == '}'&&tmp.top() == '{' ||
s[i] == ']'&&tmp.top() == '[')
{
tmp.pop();
continue;
}
}
tmp.push(s[i]);
}
return tmp.empty();
}
当我们的测试代码是正确的时候,结果如下:
int main()
{
string s = "({[]})";
cout << isValid(s) << endl;
system("pause");
return 0;
}
当我们的测试代码为错误时,结果如下:
int main()
{
string s = "({[])";
cout << isValid(s) << endl;
system("pause");
return 0;
}