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];
    }
}
}

原文地址:https://www.cnblogs.com/TeFuir/p/9520648.html