Valid Paranthesis Checker
The problem
Find the validity of an input string s that only contains the letters '(', ')' and '*'.
A string entered is legitimate if
- Any left parenthesis '(' must have a corresponding right parenthesis ')'.
- Any right parenthesis ')' must have a corresponding left parenthesis '('.
- Left parenthesis '(' must go before the corresponding right parenthesis ')'.
- '*' could be treated as a single right parenthesis ')' or a single left parenthesis '(' or an empty string "".
Input : s = (*)) Output : true Explanation : The * can be replaced by an opening '(' bracket. The string after replacing the * mark is "(())" and is a valid string.
Input : s = *(() Output : false Explanation : The * replaced with any bracket does not form a valid string.
Input : s = (**()))
- 1 <= s.length <= 104
- s consist of only '(', ')', '*'.
cpp
class Solution {
public:
bool isValid(string s) {
//your code goes here
}
};java
class Solution {
public boolean isValid(String s) {
//your code goes here
}
}python
class Solution(object):
def isValid(self, s):
#your code goes herejavascript
class Solution {
isValid(s) {
//your code goes here
}
}csharp
public class Solution
{
public bool IsValid(string s)
{
//your code goes here
}
}go
func IsValid(input string) bool {
}Stuck? Show a way to structure it+
- 01Track the minimum and maximum possible unmatched-open counts after each prefix.
- 02Update both bounds for open, close, and wildcard characters.
- 03Reject when even the maximum becomes negative; clamp the minimum to zero.
- 04Accept only when the final minimum is zero.
Reference answer
Then expect these follow-ups
How would you construct one valid wildcard assignment?
Tests: reconstruction
Why is clamping low to zero safe?
Tests: greedy proof
Free to read · better with Enzo
Practice this out loud with Enzo
Enzo runs it as a mock interview, pushes back with follow-ups, and grades you on the rubric.
Next question