我的算法是否正确? (字符串连接)

时间:2014-10-11 13:08:20

标签: java algorithm recursion

给定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++);  
}

这是我的伪代码。如果你能告诉我我的算法是否正确,我将非常感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

这个想法看起来很正确但很慢。

一些实现细节(例如,使用i++而不是i + 1,也可能是一些逐个错误)是错误的,我相信这是伪代码,而不是代码任何现有的语言。

要提示更快的解决方案,请考虑解决以下一组子问题:T长度为k的前缀是否可以表示为来自S的某些字符串的串联?这些问题可以通过动态编程方法解决,适用于从k1总长度的所有T。这些子问题中最大的一个是我们想要解决的实际问题。