合法的括号

题目描述:
对于一个字符串,请设计一个算法,判断是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
一个合法的括号串定义为:1.只包括括号字符;2.左括号和右括号一一对应。
测试样例:
“(()())”,6
返回:true;

测试样例:
“()a()()”,7

测试样例:
返回:false;
“()(()()”,7
返回:false;

思路:
首先将字符串转为字符数组,遍历整个数组,拿到每一个下标对应的字符,判断其是否是“( ”,若是,将其压入栈,;然后取到“ )”,判断栈顶元素是否是“( ”,若是,则将其出栈,否则返回false。主要利用了栈“先进后出”的特性。

代码:

import java.util.Stack;

public class Test5 {
    public static void main(String[] args) {
        String str = "()a()()";
        boolean b = chkParenthesis(str,7);
        System.out.println(b);
    }

    public static boolean chkParenthesis(String A, int n) {
        Stack<Character> stack = new Stack<>();
        char[] ch = A.toCharArray();
        for (int i = 0; i < n; i++) {
           if (ch[i] == '(') {
               stack.push(ch[i]);
           } else if (ch[i] == ')') {
               if (!stack.empty() && stack.peek() == '(') {
                   stack.pop();
               } else {
                   return false;
               }
           } else {
               return false;
           }
        }
        return true;
    }
}

版权声明:本文为weixin_45481403原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。