678_Valid Parenthesis String
678. Valid Parenthesis String
Level: medium
Tag: string
Question
Given a string containing only three types of characters: '(', ')' and '*',
write a function to check whether this string is valid.
We define the validity of a string by these rules:
1. Any left parenthesis '(' must have a corresponding right parenthesis ')'.
2. Any right parenthesis ')' must have a corresponding left parenthesis '('.
3. Left parenthesis '(' must go before the corresponding right parenthesis ')'.
4. '*' could be treated as a single right parenthesis ')' or a single left parenthesis '(' or an empty string.
5. An empty string is also valid.Example1
Input: "()"
Output: TrueExample2
Example3
Idea
"*" represent either ( or ). It won't represent both. (Because otherwise they can balance out.)
So there are two major cases that make the string not valid:
If * represent ( , scan from left to right. If the number of ) is larger than the total number of * and ( at any point, then this string is invalid.
If * represent ), scan from right to left. If the number of ( is larger than the total number of * and ) at any point, then this string is invalid.
Complexity
Time:
Space:
Solution
Last updated
Was this helpful?