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