zoukankan      html  css  js  c++  java
  • 有效的括号

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

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

    有效字符串需满足:

    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讨论*/



  • 相关阅读:
    JavaWeb 之 表单重复提交问题
    JavaWeb 之 验证码
    JavaScript 之 AJAX 请求
    JavaWeb 之 i18N 国际化
    JavaWeb 之 Gson 的使用
    JavaScript 之 JSON 对象
    JavaWeb 之 由 Tomcat 展示友好的错误信息页面
    【LeetCode-动态规划】完全平方数
    【LeetCode-递归】至少有K个重复字符的最长子串
    【LeetCode-设计】常数时间插入、删除和获取随机元素
  • 原文地址:https://www.cnblogs.com/yangyalong/p/9818121.html
Copyright © 2011-2022 走看看