class Solution {
public boolean canBeValid(String s, String locked) {
int len = s.length();
int numRight = 0, numLeft = 0; // numRight表示不可改变的右括号的数量,numLeft表示不可改变的左括号的数量
// 如果字符串的个数为奇数,直接排除
if (len%2==1) return false;
// 从左往右遍历,把不可改变的右括号“安顿好”
for (int i = 0; i < len; i++) {
if (s.charAt(i) == ')' && locked.charAt(i) == '1') {
numRight++;
if (i+1-numRight < numRight) { // 该位置之前一共有r个不可改变的右括号,能够改变的括号数量为(i+1-r)
return false;
}
}
}
// 从右往左遍历,把不可改变的左括号“安顿好”
for (int i = len-1; i >= 0; i--) {
if (s.charAt(i) == '(' && locked.charAt(i) == '1') {
numLeft++;
if (len-i-numLeft < numLeft) {
return false;
}
}
}
// 如果都没有问题
return true;
}
}