给定字符串x,y和z。确定z是否为shuffle

时间:2014-11-23 16:16:08

标签: algorithm

我正在尝试这个问题:

  

假设您有三个字符串:X,Y和Z,其中| X | = n,| Y | = m,| Z | = n + mZ被认为是X和Y的混合,当且仅当Z可以通过交叉来自X和Y的字符以保持每个字符串的字符从左到右排序的方式形成。

     

提供一种有效的算法,确定Z是否是X和Y的随机数。

     

提示:您构造的动态编程矩阵的值应为布尔值,而不是数值

我不明白为什么每个人都提出动态编程递归解决方案。

我们不能只做以下n + m算法:

  1. 保持两个指针i和j,i指向字符串x中的字符,j表示字符串y。

  2. 通过z迭代(使用迭代器k),对于每个char z [k],如果它匹配x [i]增量i,如果它匹配y [j]增量j

    2.1。如果k> i + j然后返回false

    2.2。如果k == z.length()和i或j!= x.length(),y.length()则分别返回false

  3. 返回true

  4. 根据Tanmay Patil的帖子编辑

2 个答案:

答案 0 :(得分:3)

嗯,问题陈述清楚地说明了

  

提供有效的动态编程算法

那应该解释

  

每个人都在展示动态编程递归解决方案


即使这样,它也可以像你提到的那样以迭代的方式解决。并且它不是n ^ 2算法,它的时间复杂度是n + m

祝你好运。

答案 1 :(得分:0)

你是对的。

你永远不会必须使用递归算法。你可以自由地这样做,但你可以总是使用一个交互式例程。

在此示例中,您可以使用数组或分配足够大的内存块来保存结果。