2015-05-09 72 views
-1

任何人都有一個想法,如何實現算法查找字符串是否匹配特定模式?(不包含它!)不使用正則表達式...算法,如果給定的字符串匹配給定的模式返回true

規則是,模式可以持有標誌像?或*:
? =一個字符或數字
* =多個字符或根本

例如數或非:

isMatching( 「?? AB」, 「CBAB」)返回true。
isMatching(「* a?Ab」,「123cacAbAAb」)返回false。
isMatching(「* a?Ab」,「123aaAb」)返回true。
isMatching(「* a?Ab」,「007aaabAb」)返回true。

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

+0

怎麼看待正則表達式的幕後工作,並建立自己的實現。 –

+0

還有一個問題:'(「*?Ab,」cbAb「)'return? –

+0

@SashaSalauyou:在我看來它是等於寫作」?? Ab「在這種情況下 – JavaSa

回答

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: ]) 
+0

您能解釋更多'pattern [1:]'語法的含義,爲什麼不在迭代方法中這樣做? – JavaSa

+0

噢,它只是一些從Python&C中僞裝起來的僞代碼。這裏x [1:]表示由x的第二個字符和前面的字符組成的子字符串。爲了提高效率,您可以傳遞字符串和它們的索引,而不是實際構建這些子字符串) - 我只是編寫僞代碼另外,在遞歸或迭代中沒有任何內在原因 - 無論適用於您。 –

相關問題