Algorithm 在另一个字符串中查找最大相似子字符串

Algorithm 在另一个字符串中查找最大相似子字符串,algorithm,Algorithm,我被赋予两个字符串,n1和n2。除了这些,我还得到了一个数字K 现在我需要找到三个数字-I,j,l,这样: 从n1的索引i开始的长度为l的子串与索引j为n2的长度为l的子串存在atmost K不匹配。这是K相异时可能的最大子串 举例说明: n1=大不里士 n2=都灵 K=2 那么输出应该是: i=2 j=1 l=4 [因为“briz”和“orin”有2个不同之处] 当前方法:对于n1的每个子序列,我试图找到n2中的最大公共子序列(atmost K不匹配)。有谁有更好的方法来更有效地解决这个问题

我被赋予两个字符串,n1和n2。除了这些,我还得到了一个数字K

现在我需要找到三个数字-I,j,l,这样: 从n1的索引i开始的长度为l的子串与索引j为n2的长度为l的子串存在atmost K不匹配。这是K相异时可能的最大子串

举例说明:
n1=大不里士
n2=都灵
K=2
那么输出应该是:
i=2
j=1
l=4
[因为“briz”和“orin”有2个不同之处]


当前方法:对于n1的每个子序列,我试图找到n2中的最大公共子序列(atmost K不匹配)。有谁有更好的方法来更有效地解决这个问题

我想你可以用动态编程,比如LCS


common(i,j,l,k)=s1中i处的最大子串层数,长度为l,最多k不匹配(对于所有i我认为您可以使用动态规划,如LCS


公共(i,j,l,k)=s1中i处的最大子串层数,长度为l,且最多k不匹配(对于所有i,保证存在简单解?,在这种情况下会发生什么:

n1=qertyq

n2=quertac

K=2

该算法将有多种解决方案 0,0,6

1,1,5

2,2,4

3,3,3

2,2,2


如果你保证问题只有一个解决方案,我认为Saeed是正确的,你必须使用动态规划来解决它

如果保证有一个简单的解决方案,在这种情况下会发生什么:

n1=qertyq

n2=quertac

K=2

该算法将有多种解决方案 0,0,6

1,1,5

2,2,4

3,3,3

2,2,2


如果你保证这个问题只有一个解决方案,我认为Saeed是正确的,那么你就必须使用动态规划来解决这个问题。这里有一个简单的bruteforce。它计算每个可能的I和j对的长度。复杂性是O(n1.length*n2.length*min(n1.length,n2.length)).当两个字符串的长度均为n时,这是O(n3)

for(i=0;i最佳)更新最佳
如果(n1[i]!=n2[i+偏移量])错误--
}
}

这里是一个简单的bruteforce。它计算每个可能的i和j对的长度。复杂性为O(n1.length*n2.length*min(n1.length,n2.length))。当两个字符串的长度都为n时,这是O(n3)

for(i=0;i最佳)更新最佳
如果(n1[i]!=n2[i+偏移量])错误--
}
}

如果我理解正确,它在我看来似乎是近似字符串匹配的变体(请参见:)。可能是近似字符串匹配和查找最长公共子字符串的组合:来自hackerrank:如果我理解正确,它在我看来似乎是近似字符串匹配的变体(请参见:)。可能是近似字符串匹配和查找最长公共子字符串的组合:来自hackerrank:
 common(i,j,l,k) = maximum{common(i,j,l-t-1,k-f) + common(i,j,t,f-1)} 
else
  common(i,j,l,k) = maximum{common(i,j,l-t,k-f) + common(i,j,t,f)}