0%

wildcard-matching

题目描述

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?''*' 的通配符匹配。

题解

或许,你需要来个动态规划?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
bool isMatch(string s, string p) {
int len1 = s.length();
int len2 = p.length();
bool** value = new bool*[len1+1];
for (int i = 0; i <= len1; i++)
{
value[i] = new bool[len2 + 1];
value[i][0] = false;
}
value[0][0] = true;
for (int i = 1; i <= len2; i++)
{
switch (p[i-1])
{
case '*':
value[0][i] = value[0][i - 1];
for (int j = 1; j <= len1; j++)
value[j][i] = value[j - 1][i] || value[j][i - 1];
break;
case '?':
value[0][i] = false;
for (int j = 1; j <= len1; j++)
value[j][i] = value[j - 1][i - 1];
break;
default:
value[0][i] = false;
for (int j = 1; j <= len1; j++)
value[j][i] = value[j - 1][i - 1] && p[i - 1] == s[j - 1];
break;
}
}
return value[len1][len2];
}

我要挂一个过分的例子

“abbabaaabbabbaababbabbbbbabbbabbbabaaaaababababbbabababaabbababaabbbbbbaaaabababbbaabbbbaabbbbababababbaabbaababaabbbababababbbbaaabbbbbabaaaabbababbbbaababaabbababbbbbababbbabaaaaaaaabbbbbaabaaababaaaabb”
“**aa****ba\a*bb\aa*ab****aaaaaaa\**a*aaaa**bbabb*b*b**aaaaaaaaa*a*******ba*bbb***a*ba*bb*bb\abbb”

他害我写的递归超时了。

还是怪我,动态规划学得不到位。