贪心算法

问题描述

模式要求:
只允许出现三种字符()和*
其中*可以表示(或)
给定任一字符串 输出是否()成对出现

 public static boolean checkValidString(String s) {
        if(s.length()%2!=0){
            return false;
        }
        // possible range
        int min = 0, max = 0;
        // 维护当前左括号的数量范围:[min, max]
        for (char c : s.toCharArray()) {
            if (c == '(') {
                ++min;
                ++max;
            } else if (c == ')') {
                if (min > 0) {
                    min--;
                }
                if (max-- == 0) {
                    return false;
                }// 左括号不够
            } else {
                if (min > 0) {
                    min--;
                }// 可作为右括号,抵消
                ++max; // 可作为左括号
            }
        }
        return min == 0;
    }

结果验证

 String str = "*(***)";
        System.out.println(checkValidString(str));

        str = "(()())()()((()))";
        System.out.println(checkValidString(str));

        str = "*(******(**)";
       // System.out.println(checkValidString(str));

        str = "***))";
        System.out.println(checkValidString(str));

        str = "(*)*)((**)))))))";
        //System.out.println(checkValidString(str));
        //System.out.println(originIsValid(str));

你可能感兴趣的:(贪心算法)