难度: 简单
题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
思路:
这道题比较简单,相同类型括号必须成对出现,因此字符串长度为奇数可直接返回错误。可用栈的方式存入数据,遍历字符串,左闭合括号放入栈中;右闭合括号与栈顶进行对比,若栈顶元素与当前右闭合成对,则将栈顶弹出,否则直接返回错误。
class Solution {
public:
bool isValid(string s) {
if (s.length() % 2 == 1) {
return false;
}
stack<char> stackTemp;
for(int i = 0; i < s.length(); i++)
{
if(s[i] == '(' || s[i] == '{' || s[i] == '[')
{
stackTemp.push(s[i]);
}else
{
if(stackTemp.empty())
{
return false;
}
switch(s[i])
{
case ')':
if(stackTemp.top()=='(')
stackTemp.pop();
else
return false;
break;
case '}':
if(stackTemp.top()=='{')
stackTemp.pop();
else
return false;
break;
case ']':
if(stackTemp.top()=='[')
stackTemp.pop();
else
return false;
break;
}
}
}
if(stackTemp.empty())
return true;
else
return false;
}
};