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:

  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.

Example 1:

Input:
 "()"

Output:
 True

Example 2:

Input:
 "(*)"

Output:
 True

Example 3:

Input:
 "(*))"

Output:
 True

Note:

  1. The string size will be in the range [1, 100].

Solution)

Using a backtracking

class Solution {
    public boolean checkValidString(String s) {
        return check(s, 0, 0);
    }

    private boolean check(String s, int start, int count) {
        if (count < 0) return false;

        for (int i = start; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                count++;
            }
            else if (c == ')') {
                if (count <= 0) return false;
                count--;
            }
            else if (c == '*') {
                return check(s, i + 1, count + 1) || 
                        check(s, i + 1, count - 1) || 
                        check(s, i + 1, count);
            }
        }

        return count == 0;
    }
}

results matching ""

    No results matching ""