括号匹配:一个合法的括号匹配序列

296 阅读1分钟

要求:

  1. 空串是一个合法的括号匹配序列
  2. 若X,Y都是合法匹配序列,那么XY也是
  3. 若X是合法匹配序列,那么(X)也是
  4. 每个合法括号序列都可以由以上规则生成。

思路:

  1. 空串的深度是0
  2. 如果X的深度是x,Y的深度是y,那么XY的深度是max(x,y)
  3. 如果X的深度是x,那么(X)的深度是x+1
  4. 从第一个字符开始向后遍历,碰到'(',count+1,否则count-1。用max保存,max=Math.max(max, count),max每次都保存上次循环的最大值。

示例:

输入: (())
输出:2

代码:

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int cnt = 0, max = 0, i;
        for (i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                cnt++;
            } else {
                cnt--;
            }
            max = Math.max(max, cnt);
        }
        sc.close();
        System.out.println(max);
    }
}