Java 使用堆栈算法的括号/括号匹配

Java 使用堆栈算法的括号/括号匹配,java,stack,parentheses,Java,Stack,Parentheses,例如,如果括号/方括号在以下内容中匹配: ({}) (()){}() () public class StackDemo { public static void main(String[] args) throws Exception { System.out.println("--Bracket checker--"); CharStackArray stack = new CharStackArray(10); stack.bala

例如,如果括号/方括号在以下内容中匹配:

({})
(()){}()
()
public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
以此类推,但如果括号/方括号不匹配,则应返回false,例如:

{}
({}(
){})
(()
public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
等等。你能查一下这个密码吗?提前谢谢

public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
public静态布尔isParenthesisMatch(String str){
堆栈=新堆栈();
字符c;
对于(int i=0;i
您的代码在处理“{”和“}”字符时有些混乱。它应该与您处理“('and')”的方式完全平行

public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
此代码与您的代码稍有修改,似乎工作正常:

public static boolean isParenthesisMatch(String str) {
    if (str.charAt(0) == '{')
        return false;

    Stack<Character> stack = new Stack<Character>();

    char c;
    for(int i=0; i < str.length(); i++) {
        c = str.charAt(i);

        if(c == '(')
            stack.push(c);
        else if(c == '{')
            stack.push(c);
        else if(c == ')')
            if(stack.empty())
                return false;
            else if(stack.peek() == '(')
                stack.pop();
            else
                return false;
        else if(c == '}')
            if(stack.empty())
                return false;
            else if(stack.peek() == '{')
                stack.pop();
            else
                return false;
    }
    return stack.empty();
}
public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
public静态布尔isParenthesisMatch(String str){
如果(str.charAt(0)='{')
返回false;
堆栈=新堆栈();
字符c;
对于(int i=0;i
此代码更容易理解:

public static boolean CheckParentesis(String str)
{
    if (str.isEmpty())
        return true;

    Stack<Character> stack = new Stack<Character>();
    for (int i = 0; i < str.length(); i++)
    {
        char current = str.charAt(i);
        if (current == '{' || current == '(' || current == '[')
        {
            stack.push(current);
        }


        if (current == '}' || current == ')' || current == ']')
        {
            if (stack.isEmpty())
                return false;

            char last = stack.peek();
            if (current == '}' && last == '{' || current == ')' && last == '(' || current == ']' && last == '[')
                stack.pop();
            else 
                return false;
        }

    }

    return stack.isEmpty();
}
public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
公共静态布尔校验父项(字符串str)
{
if(str.isEmpty())
返回true;
堆栈=新堆栈();
对于(int i=0;i
算法:

public class StackDemo {
    public static void main(String[] args) throws Exception {
        System.out.println("--Bracket checker--");
        CharStackArray stack = new CharStackArray(10);
        stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
        stack.display();

    }

}    

class CharStackArray {
        private char[] array;
        private int top;
        private int capacity;

        public CharStackArray(int cap) {
            capacity = cap;
            array = new char[capacity];
            top = -1;
        }

        public void push(char data) {
            array[++top] = data;
        }

        public char pop() {
            return array[top--];
        }

        public void display() {
            for (int i = 0; i <= top; i++) {
                System.out.print(array[i] + "->");
            }
        }

        public char peek() throws Exception {
            return array[top];
        }

        /*Call this method by passing a string expression*/
        public void balanceSymbol(String str) {
            try {
                char[] arr = str.toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                        push(arr[i]);
                    else if (arr[i] == '}' && peek() == '{')
                        pop();
                    else if (arr[i] == ']' && peek() == '[')
                        pop();
                    else if (arr[i] == ')' && peek() == '(')
                        pop();
                }
                if (isEmpty()) {
                    System.out.println("String is balanced");
                } else {
                    System.out.println("String is not balanced");
                }
            } catch (Exception e) {
                System.out.println("String not balanced");
            }

        }

        public boolean isEmpty() {
            return (top == -1);
        }
    }
  • 扫描字符串,将在字符串中找到的每个“(”推送到堆栈
  • 如果扫描了char'),则从堆栈中弹出一个“(”
  • 现在,括号在两种情况下是平衡的:

    public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
    • 在字符串中找到的“(”可以从堆栈中为每个“)”弹出,并且
    • 堆栈末尾为空(处理整个字符串时)

    实际上,不需要“手动”检查任何案例。您只需运行以下算法即可:

    public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 迭代给定序列。从空堆栈开始

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 如果当前字符是一个左括号,只需将其推到堆栈中即可

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 如果是结束括号,请检查堆栈是否为空,步骤的顶部元素是否为适当的开始括号(即它与此括号匹配)。如果不是,请报告错误。否则,请从堆栈中弹出顶部元素

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 最后,如果堆栈为空,则序列是正确的

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
    为什么它是正确的?下面是一个证明的草图:如果此算法报告序列已更正,则它已找到所有括号的匹配对。因此,从定义上讲,序列确实是正确的。如果它报告了错误:

    public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 如果堆栈最后不是空的,则开始括号和结束括号的平衡不是零。因此,这不是正确的顺序

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 如果在我们必须弹出一个元素时堆栈是空的,那么平衡又会失去

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
  • 如果堆栈顶部有一个错误的元素,那么一对“错误”的括号应该相互匹配。这意味着序列不正确

  • public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
    我已经证明:

    public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
    • 如果算法报告序列是正确的,则它是正确的

    • public class StackDemo {
          public static void main(String[] args) throws Exception {
              System.out.println("--Bracket checker--");
              CharStackArray stack = new CharStackArray(10);
              stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
              stack.display();
      
          }
      
      }    
      
      class CharStackArray {
              private char[] array;
              private int top;
              private int capacity;
      
              public CharStackArray(int cap) {
                  capacity = cap;
                  array = new char[capacity];
                  top = -1;
              }
      
              public void push(char data) {
                  array[++top] = data;
              }
      
              public char pop() {
                  return array[top--];
              }
      
              public void display() {
                  for (int i = 0; i <= top; i++) {
                      System.out.print(array[i] + "->");
                  }
              }
      
              public char peek() throws Exception {
                  return array[top];
              }
      
              /*Call this method by passing a string expression*/
              public void balanceSymbol(String str) {
                  try {
                      char[] arr = str.toCharArray();
                      for (int i = 0; i < arr.length; i++) {
                          if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                              push(arr[i]);
                          else if (arr[i] == '}' && peek() == '{')
                              pop();
                          else if (arr[i] == ']' && peek() == '[')
                              pop();
                          else if (arr[i] == ')' && peek() == '(')
                              pop();
                      }
                      if (isEmpty()) {
                          System.out.println("String is balanced");
                      } else {
                          System.out.println("String is not balanced");
                      }
                  } catch (Exception e) {
                      System.out.println("String not balanced");
                  }
      
              }
      
              public boolean isEmpty() {
                  return (top == -1);
              }
          }
      
    • 如果算法报告序列不正确,则它是不正确的(请注意,我没有使用除您问题中提到的情况之外没有其他情况的事实)

    • public class StackDemo {
          public static void main(String[] args) throws Exception {
              System.out.println("--Bracket checker--");
              CharStackArray stack = new CharStackArray(10);
              stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
              stack.display();
      
          }
      
      }    
      
      class CharStackArray {
              private char[] array;
              private int top;
              private int capacity;
      
              public CharStackArray(int cap) {
                  capacity = cap;
                  array = new char[capacity];
                  top = -1;
              }
      
              public void push(char data) {
                  array[++top] = data;
              }
      
              public char pop() {
                  return array[top--];
              }
      
              public void display() {
                  for (int i = 0; i <= top; i++) {
                      System.out.print(array[i] + "->");
                  }
              }
      
              public char peek() throws Exception {
                  return array[top];
              }
      
              /*Call this method by passing a string expression*/
              public void balanceSymbol(String str) {
                  try {
                      char[] arr = str.toCharArray();
                      for (int i = 0; i < arr.length; i++) {
                          if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                              push(arr[i]);
                          else if (arr[i] == '}' && peek() == '{')
                              pop();
                          else if (arr[i] == ']' && peek() == '[')
                              pop();
                          else if (arr[i] == ')' && peek() == '(')
                              pop();
                      }
                      if (isEmpty()) {
                          System.out.println("String is balanced");
                      } else {
                          System.out.println("String is not balanced");
                      }
                  } catch (Exception e) {
                      System.out.println("String not balanced");
                  }
      
              }
      
              public boolean isEmpty() {
                  return (top == -1);
              }
          }
      
    这两点意味着该算法适用于所有可能的输入。

    //基本代码非strack算法刚刚开始学习java忽略空间和时间。
    
    //basic code non strack algorithm just started learning java ignore space and time.
    /// {[()]}[][]{}
    // {[( -a -> }]) -b -> replace a(]}) -> reverse a( }]))-> 
    //Split string to substring {[()]}, next [], next [], next{}
    
    public class testbrackets {
        static String stringfirst;
        static String stringsecond;
        static int open = 0;
        public static void main(String[] args) {
            splitstring("(()){}()");
        }
    static void splitstring(String str){
    
        int len = str.length();
        for(int i=0;i<=len-1;i++){
            stringfirst="";
            stringsecond="";
            System.out.println("loop starttttttt");
            char a = str.charAt(i);
        if(a=='{'||a=='['||a=='(')
        {
            open = open+1;
            continue;
        }
        if(a=='}'||a==']'||a==')'){
            if(open==0){
                System.out.println(open+"started with closing brace");
                return;
            }
            String stringfirst=str.substring(i-open, i);
            System.out.println("stringfirst"+stringfirst);
            String stringsecond=str.substring(i, i+open);
            System.out.println("stringsecond"+stringsecond);
            replace(stringfirst, stringsecond);
    
            }
        i=(i+open)-1;
        open=0;
        System.out.println(i);
        }
        }
        static void replace(String stringfirst, String stringsecond){
            stringfirst = stringfirst.replace('{', '}');
            stringfirst = stringfirst.replace('(', ')');
            stringfirst = stringfirst.replace('[', ']');
            StringBuilder stringfirst1 = new StringBuilder(stringfirst);
            stringfirst = stringfirst1.reverse().toString();
        System.out.println("stringfirst"+stringfirst);
        System.out.println("stringsecond"+stringsecond);
    if(stringfirst.equals(stringsecond)){
        System.out.println("pass");
    }
        else{
            System.out.println("fail");
            System.exit(0);
            }
        }
    }
    
    public class StackDemo {
        public static void main(String[] args) throws Exception {
            System.out.println("--Bracket checker--");
            CharStackArray stack = new CharStackArray(10);
            stack.balanceSymbol("[a+b{c+(e-f[p-q])}]") ;
            stack.display();
    
        }
    
    }    
    
    class CharStackArray {
            private char[] array;
            private int top;
            private int capacity;
    
            public CharStackArray(int cap) {
                capacity = cap;
                array = new char[capacity];
                top = -1;
            }
    
            public void push(char data) {
                array[++top] = data;
            }
    
            public char pop() {
                return array[top--];
            }
    
            public void display() {
                for (int i = 0; i <= top; i++) {
                    System.out.print(array[i] + "->");
                }
            }
    
            public char peek() throws Exception {
                return array[top];
            }
    
            /*Call this method by passing a string expression*/
            public void balanceSymbol(String str) {
                try {
                    char[] arr = str.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] == '[' || arr[i] == '{' || arr[i] == '(')
                            push(arr[i]);
                        else if (arr[i] == '}' && peek() == '{')
                            pop();
                        else if (arr[i] == ']' && peek() == '[')
                            pop();
                        else if (arr[i] == ')' && peek() == '(')
                            pop();
                    }
                    if (isEmpty()) {
                        System.out.println("String is balanced");
                    } else {
                        System.out.println("String is not balanced");
                    }
                } catch (Exception e) {
                    System.out.println("String not balanced");
                }
    
            }
    
            public boolean isEmpty() {
                return (top == -1);
            }
        }
    
    /// {[()]}[][]{} //{[-a->}]-b->替换a(]})->反转a(}])-> //将字符串拆分为子字符串{[()]},下一个[],下一个[],下一个{} 公共类测试括号{ 静态字符串优先; 静态字符串字符串; 静态int-open=0; 公共静态void main(字符串[]args){ 拆分字符串((()){}()”; } 静态void splitstring(String str){ int len=str.length(); 对于(inti=0;i
    importjava.util.*;
    公共类括号
    {
    公共静态void main(字符串…OK)
    {
    扫描仪sc=新的扫描仪(System.in);
    字符串str=sc.next();
    System.out.println(isValid(str));
    }
    公共静态int是有效的(字符串a){
    如果(a.长度()%2!=0)
    {
    返回0;
    }
    如果(a.length()==0)
    {
    返回1;
    }
    其他的
    {
    字符c[]=a.toCharArray
    
        public static void main(String[] args) {
            System.out.println("- - - Brackets Checker [ without stack ] - - -\n\n");
            Scanner scan=new Scanner(System.in);
            System.out.print("Input : " );
            String s = scan.nextLine();
            scan.close();
            System.out.println("\n...working...\n");
            String o="([{";
            String c=")]}";
            String x=" ";
            int check =0;
            for (int i = 0; i < s.length(); i++) {
                if(o.contains(String.valueOf(s.charAt(i)))){
                    x+=s.charAt(i);     
                     //System.out.println("In : "+x); // stack in
                }else if(c.contains(String.valueOf(s.charAt(i)))) { 
                    char temp = s.charAt(i);
                    if(temp==')') temp = '(';
                    if(temp=='}') temp = '{';
                    if(temp==']') temp = '[';
                    if(x.charAt(x.length()-1)==temp) {
                        x=" "+x.substring(1,x.length()-1);
                        //System.out.println("Out : "+x);   // stack out
                }else {
                check=1;    
                }
                }
        }   
            if(x.length()==1 && check==0 ) {
                System.out.println("\n\nCompilation Success \n\n© github.com/sharanstark 2k19");
            }else {
                System.out.println("\n\nCompilation Error \n\n© github.com/sharanstark 2k19" );
            }
        }
    }`
    
    public boolean isValid(String s) {
        Map<Character, Character> map = new HashMap<>();
        map.put('(', ')');
        map.put('[', ']');
        map.put('{', '}');
        Stack<Character> stack = new Stack<>();
        for(char c : s.toCharArray()){
            if(map.containsKey(c)){
                stack.push(c);
            } else if(!stack.empty() && map.get(stack.peek())==c){
                stack.pop();
            } else {
                return false;
            }
        }
        return stack.empty();
    }
    
            public void OpenClosingBracketsMatch()
            {
                string pattern = "{[(((((}}])";
                Dictionary<char, char> matchLookup = new Dictionary<char, char>();
                matchLookup['{'] = '}';
                matchLookup['('] = ')';
                matchLookup['['] = ']';
                Stack<char> stck = new Stack<char>();
                for (int i = 0; i < pattern.Length; i++)
                {
                    char currentChar = pattern[i];
                    if (matchLookup.ContainsKey(currentChar))
                        stck.Push(currentChar);
                    else if (currentChar == '}' || currentChar == ')' || currentChar == ']')
                    {
                        char topCharFromStack = stck.Peek();
                        if (matchLookup[topCharFromStack] != currentChar)
                        {
                            Console.WriteLine("NOT Matched");
                            return;
                        }
                    }
                }
    
                Console.WriteLine("Matched");
            }
    
    #include <iostream>
    #include <stack>
    #include <string.h>
    using namespace std;
    
    int matchbracket(string expr){
        stack<char> st;
        int i;
        char x;
        for(i=0;i<expr.length();i++){
            if(expr[i]=='('||expr[i]=='{'||expr[i]=='[')
              st.push(expr[i]);
              
            if(st.empty())
             return -1;
            switch(expr[i]){
                case ')' :
                 x=expr[i];
                 st.pop();
                 if(x=='}'||x==']')
                  return 0;
                  break;
                
                case '}' :
                 x=expr[i];
                 st.pop();
                 if(x==')'||x==']')
                  return 0;
                  break;
            
                case ']' :
                x=expr[i];
                st.pop();
                if(x==')'||x=='}')
                 return 1;
                 break;
            } 
    
        }
        return(st.empty());
    }
    
    int main()
    {
     string expr;
     cin>>expr;
     
     if(matchbracket(expr)==1)
      cout<<"\nTRUE\n";
      else
      cout<<"\nFALSE\n";
    }