面试常考的 “通配符匹配” 题,用动态规划能高效解决!题目要求实现支持?(匹配单个字符)和*(匹配任意序列)的完全匹配,比如s="aa"配p="a"要返回false,配p="*"则返回true。
核心思路是用二维 DP 数组:dp[i][j]表示s前i个字符和p前j个字符是否匹配。初始化时,dp[0][0] = true(空串匹配空串),再处理p开头的*(比如p="*a"时,dp[0][1]也为true)。
遍历过程中,分两种情况:
- 若
p[j-1]是*:dp[i][j] = dp[i-1][j] || dp[i][j-1](*匹配多个 / 零个字符); - 若
p[j-1]是?或与s[i-1]相等:dp[i][j] = dp[i-1][j-1]。
这个方法时间复杂度是O(mn),能应对题目中字符串长度 2000 的限制,是面试中既清晰又高效的解法。