簡體   English   中英

我們如何使用動態編程解決子字符串匹配檢查

[英]How can we solve substring matching check using Dynamic Programming

我學習了使用動態編程來查找最長的公共子字符串的程序。 我們還可以使用動態編程來找出字符串中是否存在子字符串嗎?

我嘗試過這個。 但是,這似乎使事情變得更加復雜!

下面是我嘗試過的偽代碼。

字串:Helello

子串:llo

f(n):如果找不到子字符串的字符或找到的位置,則返回false

f(0)=匹配索引或為false

f(1)= f(0)索引的下一個索引是substring [1]或false

f(2)= f(1)索引的下一個索引是substring [1]或false

f(n)= f(n-1),后跟當前char的下一個索引或false

調用:substring('hello',2,'el');

substring(str, n, substring)
{
        if(n == 0)
        {
                for(i=0;i<strlen(str);i++)
                {
                        if(str[i] == substring[n])
                                pos[] = i; //append i to positions array
                }
                if(pos) return pos;
                return false;
        }
        else
        {
                indexes = substring(str, n-1, substring);
                if(indexes)
                {
                        foreach(indexes as index)
                        {
                                if(str[index+1] == substring[n])
                                        return true;
                        }
                        return false;
                }
        }

}

我認為您無法使用DP解決該問題。

例如,假設您有一個句子S和一個單詞W。您想檢查給定的單詞W是否是句子S的子字符串。僅當LCS(最長公共子字符串)的長度等於單詞W的長度,這意味着W實際上是LCS。 復雜度為O(N * M),其中N是S的長度,M是W的長度。

使用KMP,O(N + M)或哈希可以做得更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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