簡體   English   中英

朴素字符串模式匹配中的通配符模式匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM