给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
-
bool isValid(char * s){ int n=strlen(s); int t[n+1],top = 0; //建立一个栈,栈的长度为n+1 char x; int k=0; if(* s==')'||* s==']'||* s=='}') return false; t[top++]=*s++; //第一个左边符号进栈 while(*s){ if(* s=='('||* s=='['||* s=='{'){ t[top++]=*s++; //左边符号进栈 }else if(top==0){ return false; }else if(* s==')'){ //符号)出栈 if(t[--top]!='('){ return false; }else{ *s++; } }else if(* s==']'){ //符号]出栈 if(t[--top]!='['){ return false; }else{ *s++; } }else if(* s=='}'){ //符号}出栈 if(t[--top]!='{'){ return false; }else{ *s++; } } k=1; } if(top==0&&k==1){ return true; }else{ return false; } }
时间复杂度O(n)
空间复杂度O(n)