Problem

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: True
Example 2:
Input: "(*)"
Output: True
Example 3:
Input: "(*))"
Output: True
Note:
The string size will be in the range [1, 100].

Solution

class Solution {
    public boolean checkValidString(String s) {
        return helper(s, 0, 0);
    }
    private boolean helper(String s, int index, int count) {
        if (index == s.length()) {
            return count == 0;
        }
        
        if (count < 0) return false;
        char ch = s.charAt(index);
        if (ch == '(') return helper(s, index+1, count+1);
        else if (ch == ')') return helper(s, index+1, count-1);
        else return helper(s, index+1, count-1) || helper(s, index+1, count+1) || helper(s, index+1, count);
    }
}

linspiration
161 声望53 粉丝