[英]Wildcard Pattern Matching in Naive string pattern matching
我正在嘗試在我簡單的原始字符串匹配算法中添加通配符模式匹配,尤其是字符“*”,它將匹配我的字符列表中的一個或多個字符。 我有一個通配符“?”,它會匹配一個字符,已實現。 但我在實施“*”通配符時遇到了困難
首先是我的簡單算法:
pat 是字符模式列表
txt 是一個字符列表
def search(pat,txt):
M = len(pat)
N = len(txt)
for i in range(N-M+1):
j=0
while(j<M):
if pat[j]=="?":
j+=1
continue
if (txt[i+j]!=pat[j]):
break
j+=1
if(j==M):
print("Pattern found at index ",str(i))
txt=["A","A","B","A","A","A","C","A","A","D","A","A","B","A","A","A","B","C","A"]
pat=["A","A","?","C"]
search(pat,txt)
# Pattern found at index 3
# Pattern found at index 14
txt=["A","A","B","A","A","A","C","A","A","D","A","A","B","A","A","A","B","C","A"]
pat=["A","A","B","C"]
search(pat,txt)
# Pattern found at index 14
我想要的是使用一些示例:
txt=["C","a","t","o","r","d","o","g","i","l","o","v","e","b","o","t","h"]
pat=["d","o","g","*","b","o","t","h"]
search(pat,txt)
# Pattern found at index 5
# Corresponding to ["d","o","g","i","l","o","v","e","b","o","t","h"]
txt=["C","a","t","o","r","d","o","g","i","l","o","v","e","b","o","t","h"]
pat=["i","*"]
search(pat,txt)
# Pattern found at index 8
# Corresponding to ["i","l","o","v","e","b","o","t","h"]
txt=["C","a","t","o","r","d","o","g","i","l","o","v","e","b","o","t","h"]
pat=["*","i"]
search(pat,txt)
# Pattern found at index 0
# Corresponding to ["C","a","t","o","r","d","o","g","i"]
我怎樣才能做到這一點? 有人可以幫助我或至少指導我找到最佳解決方案嗎?
geeksforgeeks對這項練習進行了深入介紹,仔細閱讀該資源可能是您最好的選擇。 我將在這里給出一個快速的 TLDR:
dp
,如果模式的前k
個字符與輸入字符串的前j
個字符形成有效匹配,則dp[j][k]
為True
,否則為False
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.