20. 有效的括号
给定一个只包括 '(',')','{','}','[',']'
的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
- 解题思路
利用栈的思想,遇见左括号入栈,遇见右括号,检查栈顶元素,如果匹配则栈顶元素出栈,不匹配则返回false最后检查栈是否为空。 - 代码
class Solution {
public:
bool isValid(string s) {
int index=0;//栈顶元素指针
char *a=new char[s.length()];
for(int i=0;i<s.length();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')//遇见左括号入栈
{
a[index++]=s[i];
}
else if(s[i]==']')//检查匹配
{
if(index==0)return false;
if(a[index-1]=='[')
index--;
else return false;
}
else if(s[i]=='}')//同上
{
if(index==0)return false;
if(a[index-1]=='{')
index--;
else return false;
}
else if(s[i]==')')//同上
{
if(index==0)return false;
if(a[index-1]=='(')
index--;
else return false;
}
}
//delete a;
if(index==0)return true;//检查栈空
return false;
}
};
- 结果分析
时间复杂度O(n) - 问题分析
可以直接用栈类。