[44] 通配符匹配
和第十题很相似,当时第十题使用js写的直接就挪过来了,这道题当初用java写的,在转为js时又重新整理了一下逻辑。思路图解的话可以参考这篇文章:https://blog.51cto.com/u_15067267/3677200
1 /** 2 * @param {string} s 3 * @param {string} p 4 * @return {boolean} 5 */ 6 var isMatch = function(s, p) { 7 const xLen = s.length; 8 const yLen = p.length; 9 // 建立一个二维数组 10 const dp = Array.from(Array(yLen + 1), () => new Array(xLen + 1).fill(false)); 11 dp[0][0] = true; 12 for (let i = 1; i <= yLen; i++) { 13 if (p[i - 1] === '*') { 14 dp[i][0] = true; 15 } else { 16 break; 17 } 18 } 19 for (let i = 1; i <= yLen; i++) { 20 for (let j = 1; j <= xLen; j++) { 21 if (p[i - 1] == '*') { 22 dp[i][j] = dp[i][j - 1] || dp[i - 1][j]; 23 } else if (p[i - 1] === '?' || s[j - 1] === p[i - 1]) { 24 dp[i][j] = dp[i - 1][j - 1]; 25 } 26 } 27 28 } 29 return dp[yLen][xLen]; 30 31 };

浙公网安备 33010602011771号