【发布时间】:2014-11-23 16:16:08
【问题描述】:
我正在尝试这个问题:
假设给定三个字符串:X、Y 和 Z,其中 |X| = n, |Y| = m,和 |Z| = n+m.Z 被认为是 X 和 Y 的洗牌当且仅当 Z 可以通过将 X 和 Y 中的字符以保持每个字符串中字符从左到右排序的方式交错来形成。
给出一个有效的算法来确定 Z 是否是 X 和 Y 的混洗。
提示:你构造的动态规划矩阵的值应该是布尔值,而不是数字
我不明白为什么每个人都提出动态规划递归解决方案。
我们不能只做下面的 n+m 算法吗:
-
维护两个指针i和j,i指向字符串x中的字符,j指向字符串y。
-
通过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
-
返回
true
根据 Tanmay Patil 的帖子编辑
【问题讨论】:
-
当 x [i] == y [j] 时,您可能会遇到回溯问题,因此您不知道在某个点消耗哪个
-
也许我没看懂你的帖子,但这不是递归的,你为什么要使用回溯?
-
这里没有考虑太多,但是在某些时候,您会遍历两个字符串中当前都存在的字符“x”,并且使用正确的字符很重要(迭代正确的指针) .另一个问题可能是,dp 算法可能更快。
-
也许我只是错过了一个重要的事实,它会阻止你的算法这样做
-
为什么正确食用很重要?
标签: algorithm