【发布时间】:2011-08-02 20:47:06
【问题描述】:
检查 StringA = StringB 是否在任意点插入另一个 StringC 的最佳方法是什么?
例如,给定abcdef 和abcXYZdef,我想发现abcXYZdef 是abcdef,而XYZ 插入在位置4。
另一方面,给定abcdef 和abRSTcdXYZef,我想发现第一个字符串不能通过单次插入变成第二个。
我知道我可以从两端逐个字符地检查 StringA,并检查它是否覆盖了整个 StringB,但这样写起来会相当乏味。在 Python(我正在使用)中执行此操作也会相当慢,我宁愿不为此编写特殊的 C 扩展。
我可以用 Regex 或其他标准字符串操作函数来做一些聪明的事情吗?
编辑:澄清一下,StringC 是完全未知的;甚至可能没有有效的 StringC,我想知道是不是这样。
【问题讨论】:
-
如果您使示例字符串更短且更易于理解,这可能会有所帮助。
-
你真的认为写起来会那么乏味吗? Python 有很好的切片工具来检查子字符串
s1[:n]==s2[:n]。它当然效率不高,但我认为编写它不会花费很长时间。 -
我不知道你为什么拒绝逐个字符的解决方案。它看起来不会超过几行代码,而且它的速度与纯 Python 差不多。
-
@mark: 主要是因为我要处理大小为 100kb 的文本字符串;我想要比纯 python =D 更快的东西。
-
如果您需要更快的速度,逐字符比较的 C/C++ 实现可能会非常快。但首先看看下面我的 Python 实现,看看它是否足够快。
标签: python regex string algorithm