刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

带通配符的字符串匹配
通配符是一类键盘字符,当我们不知道真正字符或者不想键入完整名字时,常常使用通配符代替一个或多个真正字符。
通配符有问号(?)和星号(*)等,其中,“?”可以代替一个字符,而“*”可以代替零个或多个字符。
你的任务是,给出一个带有通配符的字符串和一个不带通配符的字符串,判断他们是否能够匹配。
例如,1?456 可以匹配 12456、13456、1a456,但是却不能够匹配23456、1aa456;
2*77?8可以匹配 24457798、237708、27798。
时间限制:1000
内存限制:65536

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

【喵呜刷题小喵解析】:这个问题是一个经典的动态规划问题,可以通过使用动态规划算法来解决。我们可以创建一个二维的布尔矩阵,其中 dp[i][j] 表示 pattern 的前 i 个字符是否能够匹配 text 的前 j 个字符。首先,我们初始化 dp[0][0] 为 True,因为空字符串可以匹配空字符串。然后,我们遍历 pattern 的每个字符。如果当前字符是星号(*),那么 pattern 的前 i 个字符可以匹配 text 的前 0 个字符,即 dp[i][0] = dp[i-1][0]。最后,我们遍历 pattern 的每个字符和 text 的每个字符。如果当前字符相等或者当前字符是问号(?),那么 pattern 的前 i 个字符可以匹配 text 的前 j 个字符,即 dp[i][j] = dp[i-1][j-1]。如果当前字符是星号(*),那么 pattern 的前 i 个字符可以匹配 text 的前 j 个字符,当且仅当 pattern 的前 i-1 个字符可以匹配 text 的前 j 个字符,或者 pattern 的前 i 个字符可以匹配 text 的前 j-1 个字符,即 dp[i][j] = dp[i-1][j] or dp[i][j-1]。最后,返回 dp[m][n],其中 m 是 pattern 的长度,n 是 text 的长度。如果 dp[m][n] 为 True,那么 pattern 可以匹配 text,否则不能匹配。
创作类型:
原创

本文链接:带通配符的字符串匹配 通配符是一类键盘字符,当我们不知道真正字符或者不想键入完整名字时,常常使用

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share