class Solution {
public boolean checkValidString(String s) {
int low = 0; //代表*作为右括号时左括号的数量
int high = 0; //代表*作为左括号时左括号的数量
for (int i = 0;i<s.length();i++) {
char str = s.charAt(i);
if (str == '(') {
low++;
high++;
} else if (str == ')') {
if(low > 0){
low--;
}
high--;
} else {
if(low > 0){
low--;
}
high++;
}
// 如果*都作为左括号了,还不能抵消右括号,返回false
if(high<0){
return false;
}
}
// 最终结果代表两种情况,我没有经历过置为0操作,最终为0.说明右括号+ * 的数量足以匹配我
// 如果我在途中被置为0,即我为负数了,有两种情况,要么是我的数量不足以来匹配右边的括号了,但是
// 这种情况由high来处理,如果不够,判断high就返回false了,我来处理的是* + high 的数量,如果此时我小于
// 0了,说明此时我不需要这个*来帮助我匹配。
return low == 0;
}
}
有效的括号字符串
最新推荐文章于 2024-06-09 16:06:06 发布