给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 示例 1: 输入: "()" 输入: "()[]{}" 输入: "(]" 输入: "([)]" 输入: "{[]}" 来源:力扣(LeetCode) |
思路:用栈实现即可,括号匹配性是栈的应用之一 看到别人有用哈希表 用python的话可以用字典 |
代码优化: 别人 可以判断字符串的长度,如果长度为奇数,直接false |
/*
用栈实现括号匹配
anan
2020.1.31
*/
typedef struct STACK{
char *p;
int top;
}STACK;
bool isValid(char * s){
STACK stack;
stack.p = (char *)malloc(sizeof(char[strlen(s)])); //这个地方分配内存要注意
stack.top = -1;
for(int i = 0; i < strlen(s); i++){
printf("处理字符%c\n", s[i]);
if(s[i]=='(' || s[i]=='{' || s[i]=='['){
stack.top++;
stack.p[stack.top] = s[i];
}
if(s[i]==')' || s[i]=='}' || s[i]==']') {
if(stack.top==-1){ //考虑特殊情况:"]"
return false;
}
if((s[i]==')' && stack.p[stack.top]!='(') || (s[i]=='}' && stack.p[stack.top]!='{') || (s[i]==']' && stack.p[stack.top]!='[') ){
return false;
}else{
stack.top--;
}
}
// printf("栈内字符:");
// for(int j = 0; j <= stack.top; j++){
// printf("%c ", stack.p[j]);
// }
// printf("\n");
}
if(stack.top==-1){
return true;
}else{
return false;
}
}