1.题目内容
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
2.示例
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
3.解题代码
bool isValid(char * s){
int len = strlen(s);
char stack1[10001];
char stack2[10001];
char stack3[10001];
char stack[10001];
int top1 = -1,top2 = -1,top3 = -1,top = -1;
int i;
int tag=0;
for(i=0;i<len;i++)
{
if(s[i]=='(')
{stack1[++top1]='('; stack[++top]='(';}
if(s[i]=='{')
{stack2[++top2]='{'; stack[++top]='{';}
if(s[i]=='[')
{stack3[++top3]='['; stack[++top]='[';}
if(s[i]==')')
{
if(top1==-1)
return false;
else
{
if(stack[top]=='(')
{--top1; --top;}
else
return false;
}
}
if(s[i]=='}')
{
if(top2==-1)
return false;
else
{
if(stack[top]=='{')
{--top2; --top;}
else
return false;
}
}
if(s[i]==']')
{
if(top3==-1)
return false;
else
{
if(stack[top]=='[')
{--top3; --top;}
else
return false;
}
}
}
if(top1==-1&&top2==-1&&top3==-1)
return true;
else
return false;
}
4.复杂度分析
时间复杂度:O(N)O(N)。遍历了一遍字符串。
空间复杂度:O(N)O(N)。最坏情况下,假如输入是(((((((,栈的大小将是输入字符串的长度。
5.解题思路
本题实质是栈的实现过程,所以我们考虑使用栈,完成各种括号的出栈和入栈操作(具体过程见代码),如果最后栈为空,那么它是有效的括号,反之不是,解题过程中应考虑各种括号间的顺序问题,如“( [ { ] } )”程序应给出的结果为false。