3
bool checkValidString(string s) {4
unordered_map<int, unordered_map<int, bool>> m;5
return dfs(s, 0, 0, m);9
bool dfs(string s, int index, int b, unordered_map<int, unordered_map<int, bool>> &m) {10
if (index == s.length()) {17
if (m.count(index) && m[index].count(b)) return m[index][b];19
if (s[index] == '(') {20
m[index][b] = dfs(s, index + 1, b + 1, m);21
} else if (s[index] == ')') {22
m[index][b] = (b != 0 && dfs(s, index + 1, b - 1, m));24
m[index][b] = dfs(s, index + 1, b, m) || dfs(s, index + 1, b + 1, m) ||25
(b != 0 && dfs(s, index + 1, b - 1, m));