给定三个字符串 A、B 和 C。编写一个函数,检查 C 是否是 A 和 B 的交错。如果 C 包含 A 和 B 的所有字符以及单个字符的顺序,则称 C 是交错 A 和 B字符串被保留。
例如:
- 'hotdog' 是 'hot' 和 'dog' 的交错(简单)
- “superb”是“up”和“serb”的交错
- “heartache”是“ear”和“ache”的交错
- “聊天”是“帽子”和“猫”的交错
- 'cheaters'不是'chat' 和 'seer' 的交错,因为虽然它包含来自每个人的所有字母,但来自 'seer' 的字母并没有按顺序出现
我在网上找到了一些解决方案,但下面是我的方法有人可以告诉我我错过了什么或者我的算法会起作用吗?谢谢。
我的算法:
- 遍历
a
和c
。在遍历时,我们首先计算两件事:char 是否存在并保存索引,即f
找到 char 的位置。一旦我们找到这个字符,我们应该在那个地方放一些特殊的字符,这样我们就不会再考虑这个字符了。 - 对于从您找到前一个字符的索引中
a
搜索的下一个字符,即。如果我们没有找到比返回。c
f
- 你也
b
一样。 - 如果在执行上述步骤后,如果我们发现
false
than 重复 firstb
thana
并返回结果。
例如
a = xxy, b = xxz and c = xxzxxxy
从一个开始:
- 对于 a 中的 x,c = 0xzxxxy(我将 0 作为特殊字符)
- 对于 a 中的 x,从索引 0 开始(因为我们在 0 处找到了前一个字符)c = 00zxxxy。
- 对于 a 中的 y,c = 00zxxx0
- 对于 b 中的 x,c = 00z0xx0
- 对于 b 中的 x,c = 00z00x0
- 对于 b 中的 z,我们在索引 4 之后找不到 z,这是我们找到 b 的前一个字符的索引。
由于从
a
返回 false 开始,所以我们现在从b开始。所以从 b 开始:
- 对于 b 中的 x,c = 0xzxxxy
- 对于 b 中的 x,c = 00zxxxy
- 对于 b 中的 z,c = 000xxxy
- 对于 a 中的 x,c = 0000xxy
- 对于 a 中的 x,c = 00000xy
- 对于 a 中的 y,c = 00000x0
因此真正的iec是a和b的交错串。