您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

正则表达式查找两个字符串的最长公共前缀

正则表达式查找两个字符串的最长公共前缀

如果有些字符两个字符串都不包含,例如,\0您可以这样写

"$first\0$second" =~ m/^(.*).*\0\1/s;

并且最长的公共前缀将另存为$1

这显然是非常低效的。我认为,如果要关注效率,那么这根本不是我们应该使用的方法。但我们至少可以通过改变改进.*,以[^\0]*防止无用的贪念,将只需要再次回溯,和包装第二[^\0]*(?>…)防止回溯那也没有办法。这个:

"$first\0$second" =~ m/^([^\0]*)(?>[^\0]*)\0\1/s;

这将产生相同的结果,但效率更高。(但仍然不是近 作为 有效作为一个简单的非正则表达式为基础的方法。如果字符串都有长度 ñ ,我预计其最坏的情况下至少需要O( ñ 2)时间,而直接的非regex-基础的方法将采取O( ñ 的)时间 最坏的情况。)

其他 2022/1/1 18:30:40 有491人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶