首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串算法作业/类似面试的问题

字符串算法作业/类似面试的问题
EN

Stack Overflow用户
提问于 2011-04-03 20:56:37
回答 5查看 614关注 0票数 2

假设我们必须使用字符串A和B。任务是在字符串B中插入任何所需的字母,以便以字符串A结束。

例如:

代码语言:javascript
复制
A - This is just a simple test 
B - is t a sim te

所以如果我们这样看字符串A:

代码语言:javascript
复制
--is -- ---t a sim--- te--

或者:

代码语言:javascript
复制
---- is ---t a sim--- te--

很明显,我们可以从字符串B构建字符串A,并且输出应该是上面所写的格式(两个答案都是正确的)。

你能想出一个算法在合理的时间内解决这个问题吗?想出暴力解决方案很容易,但我需要比这更复杂的东西。

EN

回答 5

Stack Overflow用户

发布于 2011-04-03 21:04:45

您可以将Levenshtein distance algorithm作为基础,并对其进行扩展,以记住添加/删除/替换的字符。这将在线性时间内运行。

票数 3
EN

Stack Overflow用户

发布于 2011-04-03 21:23:54

您可以在A中查找B的字符的第一个匹配项,只需在A中找到最后一个索引之后开始查找匹配项,例如在您的示例中:

代码语言:javascript
复制
A - This is just a simple test 
B - is t a sim te

i: 3rd place in A,
s: 4th place in A,
' ': 5th place in A,
t: 12th place in A, (because last index was 4)
' ': ...
a: ....

这是O(|A|+|B|),因为|A| > |B|O(|A|)

在找到索引后,很容易将B转换为A,只需将两个索引之间的A字符添加到B即可。

编辑:如果没有匹配该算法,也可以正常工作(B中将有一些字符不在A中,从上一个索引开始)。

票数 2
EN

Stack Overflow用户

发布于 2011-04-03 20:58:57

我想你可以用一个很好的reg表达式来确定它是否可行。因为在B中建议的任何字符之间可能有也可能没有1个或更多个字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5529706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档