物品名称搜索若支持通配符,问号通常表示一个位置,星号则表示任意长度片段。把星号也当成恰好一个字符,会让很多本该匹配的名称漏掉。
本例采用的规则
本文明确规定:普通字母必须相同,问号匹配恰好一个字符,星号匹配零个或多个字符,并要求整个字符串被整个模式匹配。状态记录已处理模式前缀和文字前缀;星号既可不消费文字,也可继续消费一个字符。
独立输入与结果
八组模式与文字独立匹配;空串写作空引号。表中最终行表示完整模式对各长度文字前缀的匹配结果。
模式 | 文字 | 整串匹配 | 最终行,零为假一为真 '**' | '' | True | [1] '**' | 'BCCC' | True | [1, 1, 1, 1, 1] 'CC*C' | 'CACACAC' | False | [0, 0, 0, 0, 0, 0, 0, 0] 'A??C**' | '' | False | [0] '*?B*?' | 'ACACCBBC' | True | [0, 0, 0, 0, 0, 0, 0, 1, 1] '**A' | 'BBBACBC' | False | [0, 0, 0, 0, 1, 0, 0, 0] '**?BC' | 'ABCBBCBC' | True | [0, 0, 0, 1, 0, 0, 1, 0, 1] 'BCCCC' | 'CCACAA' | False | [0, 0, 0, 0, 0, 0, 0]
表中的编号仅用于区分当前案例里的对象,不能与数值大小或另一份记录中的身份混淆。先核对输入、单位和边界约定,再跟随过程检查输出。空列表、不存在和数值零各有不同含义,分数则保留精确形式便于复算。
检查与练习
空模式只能匹配空串,只有星号组成的模式能匹配空串。连续星号允许出现,但不会要求额外字符。结果是整串匹配,不能找到中间某一小段符合就返回成功。
可以把每个星号分配到的字符片段列出来,对照文字是否被完整且按顺序覆盖。相同文字可能有多种合法分配,但布尔匹配结果仍只有真或假。动态规划的每一步都缩小到前缀问题,避免靠无限重复尝试来处理空星号。
结论适用范围
本例只使用三个大写字母,不处理目录分隔符、转义、大小写折叠或正则表达式语法。不同工具对通配符可能有不同约定,因此实际使用前应查看自身规则,不能仅凭星号这个符号猜测全部行为。
这是一份可重复演算的游戏知识记录,结论只对写明的输入与规则成立。练习时可以先改变一个条件,再对照中间记录寻找变化从哪一步开始。若结果不同,应先确认操作顺序和边界定义,而不是只改最后一个数字;原始输入与完整过程应一起保留。
