Back to all solutions
#678 - Valid Parenthesis String
Problem Description
Given a string s containing only three types of characters: '(', ')' and '*', return true if s is valid.
The following rules define a valid string:
- 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 "".
Solution
/**
* @param {string} s
* @return {boolean}
*/
var checkValidString = function(s) {
let result = 0;
let offset = 0;
for (const character of s) {
result += character === '(' ? 1 : -1;
offset += character !== ')' ? 1 : -1;
if (offset < 0) return false;
result = Math.max(0, result);
}
return !result;
};