678. Valid Parenthesis String
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:
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.An empty string is also valid.
Example 1:
Input: "()"
Output: TrueExample 2:
Input: "(*)"
Output: TrueExample 3:
Input: "(*))"
Output: TrueThoughts:
DP
"two counter": min_op_left: how many open "(" if regarding all * to be ")"; max_op_left: how many open "(" if regarding all * to be "("
key idea: max_op_left should always be >= 0 in order to be considered legal, otherwise it will have unbalanced ")" and the parenthesis will never be balanced by further appending any char after it.
Code: unordered DP with memoization Time: O(n^3) Space: O(n^2), Top-Down
Code: Ordered DP with memoization Time: O(n^3) Space: O(n^2), Bottom Up
Code Counting Time: O(n), Space: O(1)
Python
Special Thanks to Huahua's blog
Last updated
Was this helpful?