题库首页 › 青少年软件编程(C语言) › 题目 4593

通配符匹配 给定一个字符串s和一个字符模式p,请实现一个支持'?'和'*'的通配符匹配功能。 其中‘?’可以匹配任何单个字符,如‘a?c’可以成功匹配‘aac’,‘abc’等字符串,但不可匹配‘ac’,‘aaac’等字符串 。 ‘*’ 可以匹配任意长度字符串(包括空字符串),如‘a*c’可以成功匹配‘ac’,‘abdc’,‘abc’,‘aaac’等字符串,但不可匹配‘acb’,‘cac’等字符串。 两个字符串完全匹配才算匹配成功。 时间限制:2000 内存限制:262144 输入 输入为一个数字n表示测试字符串与字符模式对数,换行。(n ≤ 30) 后续2n行为每组匹配的s与p,每行字符串后换行。 s 非空,只包含从 a-z 的小写字母。 p 非空,只包含从 a-z 的小写字母,以及字符 ? 和 *。 字符串s和p的长度均小于50 输出 每一组匹配串匹配成功输出‘yes’,否则输出‘no’。 样例输入 3 abc abc abc a*c abc a??c 样例输出 yes yes no

正确答案:参考程序(C++):通配符匹配DP。dp[i][j]表示s前i个与p前j个是否匹配;'?'匹配任意单字符,'*'匹配任意长度。转移:p[j]=='?'则dp[i][j]=dp[i-1][j-1];p[j]=='*'则dp[i][j]=dp[i-1][j]||dp[i][j-1];否则需s[i]==p[j]且dp[i-1][j-1]。样例abc与a*c→yes,abc与a??c→no。

试卷来源:202212 青少年等级考试C/C++真题五级

本卷相关题目

在线做题 同科目题库