20. 有效的括号
难度简单
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
思路:这道题可以用栈来解决,如果遇到左括号,入栈,遇到右括号,出栈,判断,匹配,继续,否则,错误,然后还有考虑特殊情况,第一个元素为右括号,获得的数据为空,获得的数据为奇数个,这些情况都应返回false。
1 bool isValid(char * s){ 2 if(strlen(s)==0){ 3 return true; 4 } 5 if(strlen(s)%2==1){ 6 return false; 7 } 8 if(s[0]==']'||s[0]=='}'||s[0]==')'){ 9 return false; 10 } 11 int i,top=-1; 12 char stack[strlen(s)]; 13 for(i=0;i<strlen(s);i++){ 14 if(s[i]=='['||s[i]=='{'||s[i]=='('){ 15 stack[++top]=s[i]; 16 }else if(s[i]==']'||s[i]=='}'||s[i]==')'){ 17 switch(s[i]){ 18 case ']': 19 if(stack[top--]=='['){ 20 break; 21 }else{ 22 return false; 23 } 24 case '}': 25 if(stack[top--]=='{'){ 26 break; 27 }else{ 28 return false; 29 } 30 case ')': 31 if(stack[top--]=='('){ 32 break; 33 }else{ 34 return false; 35 } 36 } 37 } 38 } 39 if(top==-1){ 40 return true; 41 }else{ 42 return false; 43 } 44 }