给定m个字符串的集合S和目标字符串t,我们想要在允许重复的同时检查t是否是某些m个字符串的串联。 示例:S = {ab,dbe,eaa,ea}和t = eaabdbeab。答案是肯定的,t = ea ab dbe ab。
算法:
boolean IsConcatenation{S, t, i} {
int a=S[i].length;
int b=t.length-1;
String str=t.charAt(1)+t.charAt(2)+...+t.charAt(a-1);`
if (S[i]==str) { `
if (i<m) //m=S.length
boolean A= IsConcatenation(S,t, i++);
t=t.charAt(a)+t.charAt(a+1)+...+t.charAt(b);
boolean B= IsConcatenation(S,t, 0);
}
if (i==m+1)
return false;
if (t.length==0}
return true;
return IsConcatenation(S,t, i++);
}
这是我的伪代码。如果你能告诉我我的算法是否正确,我将非常感激。
谢谢。
答案 0 :(得分:0)
这个想法看起来很正确但很慢。
一些实现细节(例如,使用i++
而不是i + 1
,也可能是一些逐个错误)是错误的,我相信这是伪代码,而不是代码任何现有的语言。
要提示更快的解决方案,请考虑解决以下一组子问题:T
长度为k
的前缀是否可以表示为来自S
的某些字符串的串联?这些问题可以通过动态编程方法解决,适用于从k
到1
总长度的所有T
。这些子问题中最大的一个是我们想要解决的实际问题。