贪心算法
2020-12-20 本文已影响0人
zh_harry
问题描述
模式要求:
只允许出现三种字符()和*
其中*可以表示(或)
给定任一字符串 输出是否()成对出现
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));