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

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

    有效字符串需满足:

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

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

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

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

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

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

    示例 5:

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

    思路:
    用栈的数据结构,给定一个字符串,首先判断是不是一个空串,如果是空串返回true。进入循环如果这个栈是空的,将字符插入栈中,如果这个栈不是空的,判断这个字符和栈尾的字符是否配套,如果配套则移除栈尾字符并且跳过这次循环
    如果这个字符是右括号而且和栈尾字符不配套,返回false,剩余情况(例如插入的是两个‘(’‘【’字符)就是插入这个字符。最后循环完之后,如果栈中是空的则返回true否则返回false。

    代码:
    class Solution {
        public boolean isValid(String s) {
            MyStack myStack = new MyStack(10000);
            if (s.equals("")) return true;
            for (int i = 0; i < s.length(); i++) {
                if (myStack.getnElement() == 0) {
                    myStack.insert(s.charAt(i));
                } else if (myStack.getnElement() > 0) {
                    char c1 = s.charAt(i);
                    char c2 = myStack.getEndElement();
                    if (c1 == ')' && c2 != '(' || c1 == '}' && c2 != '{' || c1 == ']' && c2 != '[') {
                        return false;
                    } else if (c1 == ')' && c2 == '(' || c1 == '}' && c2 == '{' || c1 == ']' && c2 == '[')
                        {
                            myStack.remove();
                            continue;
                        }else myStack.insert(s.charAt(i));
    
                }
            }
            if (myStack.getnElement() == 0) return true;
            return false;
    
        }
        class MyStack {
        private char[] chars;
        private int nElement=0;
        public MyStack(int i){
            chars=new char[i];
        }
        public void insert(char c){
            chars[nElement++]=c;
        }
        public char remove(){
            return chars[--nElement];
        }
        public char getEndElement(){
            return chars[nElement-1];
        }
        public int getnElement(){
            return nElement;
        }
        public char getChar(int i){
            return chars[i];
        }
    }
    }

  • 相关阅读:
    emacs窗口切换神器--window-numbering
    yum命令总结
    Emacs快捷键设置
    emacs常用命令
    Emacs编辑远程服务器中的文件
    (转)emacs安装cedet和ecb
    (转)replace 和 on duplicate key update语句
    HashMap解决hash冲突的方法
    程序员的学习和积累
    HttpClient 设置代理方式
  • 原文地址:https://www.cnblogs.com/TeFuir/p/9520648.html
Copyright © 2011-2022 走看看