[C语言][LeetCode][20]Valid Parentheses
2016-05-06 08:36
429 查看
题目
Valid ParenthesesGiven a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
标签
Stack、Array难度
简单分析
题目的意思是判断字符串里的括号是否有效。实现思路是,将( [ { 这三种符号入栈,如果遇到) ] }这三种符号,则比较栈顶符号是否匹配,如果不匹配,则返回false,如果匹配,将栈顶符号弹出,继续下一个符号比较。C代码实现
typedef char ElemType; typedef struct STACK_T { ElemType value; struct STACK_T * next; }STACK; typedef struct STACK_T NODE; STACK * stack = NULL; STACK * stack_init(void) { STACK * stack = (STACK *)malloc(sizeof(STACK)); if(!stack) { printf("malloc stack fail\n"); return NULL; } memset(stack, 0, sizeof(STACK)); stack->next = NULL; return stack; } bool stack_is_empty(STACK * stack) { return (stack->next == NULL); } ElemType stack_pop(STACK * stack) { ElemType retValue; STACK * temp = NULL; if(!stack_is_empty(stack)) { temp = stack->next; stack->next = stack->next->next; retValue = temp->value; free(temp); } else { printf("stack is empty\n"); return 0; } return retValue; } int stack_push(STACK * stack, ElemType ele) { NODE * node = (NODE *)malloc(sizeof(NODE)); node->value = ele; node->next = stack->next; stack->next = node; return 0; } ElemType stack_top(STACK * stack) { if(!stack_is_empty(stack)) { return stack->next->value; } return (ElemType)(-1); } bool isValid(char* s) { char * p = s; if(!p) return false; if(*(p+1) == '\0') return false; stack = stack_init(); while(*p != '\0') { if( (*p == '(') ||(*p == '{') || (*p == '[') ) stack_push(stack, *p); else if(*p == ')') { if('(' != stack_top(stack)) return false; else stack_pop(stack); } else if(*p == '}') { if('{' != stack_top(stack)) return false; else stack_pop(stack); } else if(*p == ']') { if('[' != stack_top(stack)) return false; else stack_pop(stack); } else return false; p = p + 1; } if(true == stack_is_empty(stack)) return true; else return false; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置