如果给定字符串与给定模式匹配则返回true的算法

时间:2015-05-09 10:24:33

标签: algorithm pseudocode

任何人都知道如何实现算法查找字符串是否匹配特定模式?(不包含它!)而不使用正则表达式...

规则是,模式可以保持标志吗?或*:
? =一个字符或数字
* =多个字符或数字或完全没有

例如:

isMatching(" ?? Ab"," cbAb")返回true。
isMatching(" * a?Ab"," 123cacAbAAb")返回false。
isMatching(" * a?Ab"," 123aaAb")返回true。
isMatching(" * a?Ab"," 007aaabAb")返回true。

isMatching(" a?D *"," arD1324687e")返回true。

1 个答案:

答案 0 :(得分:1)

某种类型的递归很简单:

def match(pattern, str):
    return match_(pattern, str)

def match_(pattern, str)
   if len(pattern) == 0 and len(str) == 0:
       return True

   switch pattern[0]:
       case '?':
            match_(pattern[1: ], str[1: ])
       case '*':
            return match_(pattern, str[1: ]) or match_(pattern[1: ], str[1: ]) or match_(pattern[1: ], str)
       default:
            return pattern[0] == str[0] and match_(pattern[1: ], str[1: ])