zoukankan      html  css  js  c++  java
  • LeetCode

    原题目:

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    解题思想:

    通过观察可以发现,有效的括号都至少具有一组左括号和右括号相邻的情况,然后可以将这一部分由相邻左右括号构成的子串去掉,判断剩下部分的有效性。(这一点就像自己计算数学题一样,一般都是先计算最深层的括号,然后得到数之后,再计算下一层的括号,直到最后一层),具体解题思路如下:

    1、构建右括号和左括号之间的映射;

    2、建立一个栈,遍历字符串,遇到左括号将其放到栈里面,遇到右括号,根据步骤1中的映射关系,判断栈顶的括号是否与该右括号构成有效括号,如果不构成,直接返回false,如果是有效的,弹出栈顶元素,继续遍历;(栈数据结构是后进先出,因此用栈来存储已遍历的括号字符)

    3、判断最终栈是否为空,如果不为空,则不是有效括号。

    题解:

     1 class Solution {
     2     public static boolean isValid(String s) {
     3         HashMap<Character , Character> maps = new HashMap<>();
     4         int len = s.length();
     5         if(len % 2 != 0) return false; //长度为奇数,直接返回false
     6         maps.put(')', '(');
     7         maps.put('}', '{');
     8         maps.put(']', '[');
     9         Stack<Character> stack = new Stack<Character>();
    10         for (int i = 0; i < s.length(); i++) {
    11             char c = s.charAt(i);
    12             if (maps.containsKey(c)) {
    13                 char topElement = stack.empty() ? '#' : stack.pop();
    14                 if (topElement != maps.get(c)) {
    15                     return false;
    16                 }
    17             } else {
    18                 stack.push(c);
    19             }
    20         }
    21         return stack.isEmpty();
    22     }
    23 }
  • 相关阅读:
    一个JAVA题引发的思考
    eclipse好玩的插件集(一) CKEditor插件
    Log4J使用实例---日志进行邮件发送或是存入数据库
    log4j输出到数据库(输出自定义参数、分级保存)
    String和StringBuffer的一点研究
    String、StringBuffer、StringBuilder区分和性能比较
    最新eclipse安装SVN插件
    jsoup select 选择器
    网页导出excel文件
    Dom4j完整教程
  • 原文地址:https://www.cnblogs.com/zhang-yi/p/12757783.html
Copyright © 2011-2022 走看看