【数据结构与算法】44. Wildcard Matching
链接:https://leetcode.com/problems/wildcard-matching/description/
题目说明:外卡匹配,使用动态规划的思路。外卡匹配和正则匹配的最大不同就是外卡匹配中星号可以单独存在。
创建匹配数组(用vector<vector<bool>> match表示),大小分别为s.length()+1和p.length()+1,数组内容match[i][j]表示s中s[i]之前(包含s[i])和p中p[j]之前(包含p[j])是否匹配。
动态规划的初始状态match[0][0]=true;match[i][0]=false;math[0][j]=match[0][j-1] while p[j]='*'
AC代码:
class Solution { public: bool isMatch(string s, string p) { int m = s.length(); int n = p.length(); vector<vector<bool>> match(m+1 ,vector<bool>(n+1, false)); match[0][0] = true; for (int pi = 1; pi <= n; ++pi) { if (p[pi-1] == '*') { match[0][pi] = match[0][pi-1]; } } for (int si = 1; si <= m; ++si) { for (int pi = 1; pi <= n; ++pi) { if (s[si-1] == p[pi-1] || p[pi-1] == '?') { match[si][pi] = match[si-1][pi-1]; } else if (p[pi-1] == '*') { match[si][pi] = match[si-1][pi] || match[si][pi-1]; } } } return match[m][n]; } };