1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public boolean canBeValid(String s, String locked) { if (s.length() % 2 > 0) { return false; }
int leftMin = 0, leftMax = 0; for (int i = 0; i < s.length(); i++) { if (locked.charAt(i) == '1') { if (s.charAt(i) == '(') { leftMin++; leftMax++; } else { leftMin--; leftMax--; } } else { leftMax++; leftMin--; } if (leftMax < 0) { return false; } leftMin = Math.max(0, leftMin); }
return leftMin == 0; } }
|
DFS 也能解题,但是判题会 TLE,所以采用贪心解法实现。
References
2116. Check if a Parentheses String Can Be Valid
678. Valid Parenthesis String