Back to all solutions
#2267 - Check if There Is a Valid Parentheses String Path
Problem Description
A parentheses string is a non-empty string consisting only of '(' and ')'. It is valid if any of the following conditions is true:
- It is ().
- It can be written as AB (A concatenated with B), where A and B are valid parentheses strings.
- It can be written as (A), where A is a valid parentheses string.
You are given an m x n matrix of parentheses grid. A valid parentheses string path in the grid is a path satisfying all of the following conditions:
- The path starts from the upper left cell (0, 0).
- The path ends at the bottom-right cell (m - 1, n - 1).
- The path only ever moves down or right.
- The resulting parentheses string formed by the path is valid.
Return true if there exists a valid parentheses string path in the grid. Otherwise, return false.
Solution
/**
* @param {character[][]} grid
* @return {boolean}
*/
var hasValidPath = function(grid) {
const m = grid.length;
const n = grid[0].length;
if ((m + n - 1) % 2 !== 0) {
return false;
}
if (grid[0][0] === ')' || grid[m - 1][n - 1] === '(') {
return false;
}
const visited = new Set();
return dfs(0, 0, 0);
function dfs(i, j, openCount) {
if (i >= m || j >= n || openCount < 0) {
return false;
}
openCount += grid[i][j] === '(' ? 1 : -1;
if (i === m - 1 && j === n - 1) {
return openCount === 0;
}
const key = `${i},${j},${openCount}`;
if (visited.has(key)) {
return false;
}
visited.add(key);
return dfs(i + 1, j, openCount) || dfs(i, j + 1, openCount);
}
};