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

简答题

带通配符的字符串匹配
通配符是一类键盘字符,当我们不知道真正字符或者不想键入完整名字时,常常使用通配符代替一个或多个真正字符。通配符有问号(?)和星号(*)等,其中,"?“可以代替一个字符,而”*"可以代替零个或多个字符。

你的任务是,给出一个带有通配符的字符串和一个不带通配符的字符串,判断他们是否能够匹配。

例如,1?456 可以匹配 12456、13456、1a456,但是却不能够匹配23456、1aa456;
2*77?8可以匹配 24457798、237708、27798。
时间限制:1000
内存限制:65536
输入
输入有两行,每行为一个不超过20个字符的字符串,第一行带通配符,第二行不带通配符
输出
如果两者可以匹配,就输出"matched",否则输出"not matched"
样例输入

1*456?
11111114567

样例输出

matched

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

答案:

解析:

【喵呜刷题小喵解析】这是一个字符串匹配的问题,需要判断带通配符的字符串是否能匹配另一个不带通配符的字符串。通配符有问号和星号,问号可以匹配任意单个字符,星号可以匹配任意数量的字符(包括零个)。我们可以使用动态规划来解决这个问题。首先,我们创建一个二维数组dp,dp[i][j]表示pattern的前i个字符是否能匹配text的前j个字符。然后,我们遍历pattern和text的每个字符,根据当前字符和通配符的类型来更新dp数组。具体地,如果当前字符匹配,那么dp[i][j] = dp[i-1][j-1];如果当前字符是星号,那么dp[i][j] = dp[i-1][j] or dp[i][j-1]。最后,如果dp[m][n]为True,表示两个字符串可以匹配,否则表示不能匹配。在Python中,我们可以使用strip()函数来去除字符串两端的空格,然后使用if-elif-else语句来根据当前字符和通配符的类型来更新dp数组。最后,我们输出匹配的结果。
创作类型:
原创

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

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

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

分享考题
share