96 lines
2.8 KiB
Java
96 lines
2.8 KiB
Java
//一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串。如果一个字符串满足下面 任意 一个条件,那么它就是有效的:
|
||
//
|
||
//
|
||
// 字符串为 ().
|
||
// 它可以表示为 AB(A 与 B 连接),其中A 和 B 都是有效括号字符串。
|
||
// 它可以表示为 (A) ,其中 A 是一个有效括号字符串。
|
||
//
|
||
//
|
||
// 给你一个括号字符串 s 和一个字符串 locked ,两者长度都为 n 。locked 是一个二进制字符串,只包含 '0' 和 '1' 。对于
|
||
//locked 中 每一个 下标 i :
|
||
//
|
||
//
|
||
// 如果 locked[i] 是 '1' ,你 不能 改变 s[i] 。
|
||
// 如果 locked[i] 是 '0' ,你 可以 将 s[i] 变为 '(' 或者 ')' 。
|
||
//
|
||
//
|
||
// 如果你可以将 s 变为有效括号字符串,请你返回 true ,否则返回 false 。
|
||
//
|
||
//
|
||
//
|
||
// 示例 1:
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//输入:s = "))()))", locked = "010100"
|
||
//输出:true
|
||
//解释:locked[1] == '1' 和 locked[3] == '1' ,所以我们无法改变 s[1] 或者 s[3] 。
|
||
//我们可以将 s[0] 和 s[4] 变为 '(' ,不改变 s[2] 和 s[5] ,使 s 变为有效字符串。
|
||
//
|
||
// 示例 2:
|
||
//
|
||
//
|
||
//输入:s = "()()", locked = "0000"
|
||
//输出:true
|
||
//解释:我们不需要做任何改变,因为 s 已经是有效字符串了。
|
||
//
|
||
//
|
||
// 示例 3:
|
||
//
|
||
//
|
||
//输入:s = ")", locked = "0"
|
||
//输出:false
|
||
//解释:locked 允许改变 s[0] 。
|
||
//但无论将 s[0] 变为 '(' 或者 ')' 都无法使 s 变为有效字符串。
|
||
//
|
||
//
|
||
//
|
||
//
|
||
// 提示:
|
||
//
|
||
//
|
||
// n == s.length == locked.length
|
||
// 1 <= n <= 10⁵
|
||
// s[i] 要么是 '(' 要么是 ')' 。
|
||
// locked[i] 要么是 '0' 要么是 '1' 。
|
||
//
|
||
// 👍 4 👎 0
|
||
|
||
package leetcode.editor.cn;
|
||
|
||
//5948:判断一个括号字符串是否有效
|
||
class CheckIfAParenthesesStringCanBeValid {
|
||
public static void main(String[] args) {
|
||
//测试代码
|
||
Solution solution = new CheckIfAParenthesesStringCanBeValid().new Solution();
|
||
}
|
||
|
||
//力扣代码
|
||
//leetcode submit region begin(Prohibit modification and deletion)
|
||
class Solution {
|
||
public boolean canBeValid(String s, String locked) {
|
||
int n = s.length();
|
||
int min = 0;
|
||
int max = 0;
|
||
for (int i = 0; i < n; i++) {
|
||
if (locked.charAt(i) == '0') {
|
||
min = Math.max(min - 1, 0);
|
||
max += 1;
|
||
} else if (s.charAt(i) == '(') {
|
||
min += 1;
|
||
max += 1;
|
||
} else {
|
||
min = Math.max(min - 1, 0);
|
||
max -= 1;
|
||
if (max < 0) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return min == 0 && max % 2 == 0;
|
||
}
|
||
}
|
||
//leetcode submit region end(Prohibit modification and deletion)
|
||
|
||
} |