zoukankan      html  css  js  c++  java
  • LeetCode 6.判断字符串中的括号是否对称

    题目描述

    题目难度:简单

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

    有效字符串需满足:

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

    示例 1:

    输入: "()"
    输出: true


    示例 2:

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

    输入: "(]"
    输出: false


    示例 4:

    输入: "([)]"

    输出: false


    示例 5:

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

    解题思路

    对于一个字符串,先toCharArray()把它转化成char类型的数组

    再使用一个栈来操作;

    遍历char数组,对于每一个char有以下情况

    (1)假如stack的size为0,则表示之前遍历过的char都能刚好配对,此时如果数组中还有没有遍历的,则直接将其push进stack,继续往下遍历;

    (2)假如stack的size不为0,且栈顶的元素和当前遍历到的元素刚好符合“{”“}”或“(”“)”或“[”“]”,则表示当前配对,此时就将栈顶的元素pop出来,继续往下遍历;

    (3)假如stack的size不为0,且没有满足第二种情况,则直接将其push进stack,继续往下遍历;

    当遍历完整个数组后,如果stack的size刚好为0,则证明是配对的;如果不为0,则当然不配对啦。

     

     

    代码如下

    class Solution {
        public boolean isValid(String s) {
               Stack<Character> stack=new Stack<>();
               char[] chars=s.toCharArray();
               for(char aChar:chars){
                   if(stack.size()==0){
                       stack.push(aChar);
                   }else if(isSym(stack.peek(),aChar)){
                       stack.pop();
                   }else{
                       stack.push(aChar);
                   }
               }
               return stack.size()==0;
        }
        private boolean isSym(char c1, char c2) {
            return (c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']') || (c1 == '{' && c2 == '}');
        }
    }
  • 相关阅读:
    sqlserver2005系统表、视图研究2
    SQLServer2005新分页方法
    应该多了解一些工具
    关于SQLServer的小技巧
    EasyUI DataGrid使用Json加载不了数据
    js跨域及解决方案
    关于Master Page的css和js文件引用问题
    嵌套母版页
    SSMS获取存储过程中的返回值和output值
    静态构造函数
  • 原文地址:https://www.cnblogs.com/Transkai/p/12371530.html
Copyright © 2011-2022 走看看