【发布时间】:2012-02-25 05:30:58
【问题描述】:
是否有一个正则表达式可以找到两个字符串的最长公共前缀?如果这不能通过一个正则表达式来解决,那么使用正则表达式(perl、ruby、python 等等)的最优雅的代码或单行代码将是什么。
PS:我可以通过编程轻松地做到这一点,我只是出于好奇,因为在我看来这可以通过正则表达式来解决。
PPS:使用正则表达式的 O(n) 解决方案的额外奖励。来吧,它应该存在的!
【问题讨论】:
-
我认为这不可能。使用 RE,您可以查看一段数据(字符串)是否与表达式匹配(RE:如果您愿意,则为程序)。您现在必须处理数据——(正确的)RE 也不是。要找到最长的公共前缀,您需要将两者都作为输入的“某物”……但 RE 不这样做:需要一些胶水。
-
我对胶水解决方案很满意 - 也许将其中一个字符串转换为正则表达式,然后在第二个字符串上使用它......
-
这两个字符串是随机输入还是其中一个有权限?在第二种情况下(例如,字符串被多次重复用于相同的匹配)一些优化是值得做的。
-
另见:stackoverflow.com/questions/7475437/…(PHP;不确定它是否也适用于 Python)
-
我下面的解决方案解决了外星生命形式提出的问题。你有两个输入和一个输出。 Perl 风格的伪正则表达式不允许这样做。但更通用的方法是可能的。另一个奇怪地未被提及的问题是 lcp 最常用于后缀数组的上下文中,在此上下文中,有用于查找完整 lcp 表的线性时间算法。最著名的是 Ko 等人。
标签: python ruby regex perl replace