String 计算作为所有四个字符串的子序列的不同非空字符串
下面是一个函数,它要求您计算不同的非空字符串,这些字符串是所有四个字符串的子序列。比如说String 计算作为所有四个字符串的子序列的不同非空字符串,string,algorithm,dynamic-programming,String,Algorithm,Dynamic Programming,下面是一个函数,它要求您计算不同的非空字符串,这些字符串是所有四个字符串的子序列。比如说 Input: aabb abab baba acba Output: 4 The four sequences are "a", "b", "aa", and "ab". 如何解决这个问题?为了不破坏乐趣,我不发布完整的答案,只是给你一些想法 将四个字符串写为A,B,C,D 对于非负整数i,请为通过删除第一个i字母获得的a的子字符串写入a。同样的符号也适用于B、C、D 对于字母X(从a到z)和
Input:
aabb
abab
baba
acba
Output:
4
The four sequences are "a", "b", "aa", and "ab".
如何解决这个问题?为了不破坏乐趣,我不发布完整的答案,只是给你一些想法 将四个字符串写为
A
,B
,C
,D
对于非负整数i
,请为通过删除第一个i
字母获得的a
的子字符串写入a
。同样的符号也适用于B
、C
、D
对于字母X
(从a
到z
)和四个非负整数i
,j
,k
,l
,定义F(X,i,j,k,l)
为a
,B
,C
,的不同公共子序列的数目,D
以字母X
开头
尝试查找这些F
之间的重复关系。这提供了一种动态规划方法
编辑:更多细节在这里
F(X,i,j,k,l)
可以如下计算:让i0
成为i
之后的第一个索引,使得A[i0]=X
。类似地定义j0
,k0
,l0
只有在所有四个子字符串中出现X
时,才会定义标记i0
,j0
,k0
,l0
。否则,显然F(X,i,j,k,l)=0
一旦定义了四个标记,以X
开头的A
、B
、C
、D
的任何公共子序列都将采用xs
的形式,其中s
是A
、B
、C
、D
的公共子序列。因此,公式如下:
F(X,i,j,k,l)=所有F(Y,i0,j0,k0,l0)之和
其中,总和从a
到z
覆盖所有Y
最后一个技巧:使用延迟传播来避免无用的计算。噢!thanx对于这一令人敬畏的建议,我尝试使用两个字符串的LCS方法建立递归,但当时无法解决。thanx you@WhatsUp,你真的让我高兴,这是我接受的代码如果有人需要进一步帮助@sumit在这种情况下,你介意接受答案吗?