有效的括号

/*******************************/

题目:给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true
/*******************************/
/*******************************/

算法:本题可以考虑使用栈的数据结构来实现。首先,当字符串长度为奇数时,可以直接返回该括号无效。其次可以这样,取出字符串中的一个字符若为左括号则让其进栈;若为右括号则将栈顶元素与所取的元素比较,若为有效括号则让栈顶元素出栈。一直循环,直到所有字符被遍历完成。循环结束之后,如果栈元
素为空则表明此括号为有效括号,反之则无效。

/*******************************/

代码:
bool isValid(char* s) {
    int i, len, index = 0;        /*len记录字符串长度*/
    char cur, peak;        /*为进栈元素和栈顶元素*/

len = strlen(s); if (len % 2 != 0) return false; char *stack = malloc(len / 2); /*定义一个大小为len/2的栈*/ for (i = 0; i < len ; i++) { cur = *s; /*先将左括号进栈*/ if (cur == '(' || cur == '{' || cur == '[') { stack[index++] = cur; } else { peak = stack[index - 1]; if (peak == '('&&cur == ')' || peak == '{'&&cur == '}' || cur == ']'&&peak == '[') { index--; } } s++; } if (index != 0) return false; else return true; }

/*欢迎大家评论和提问,也可以加QQ:1390644540讨论*/