【问题标题】:find matching string in two strings在两个字符串中找到匹配的字符串
【发布时间】:2014-02-11 02:42:02
【问题描述】:

我想获得一个 perl 脚本的提示,该脚本可以找到两个字符串中存在的最长公共子字符串。每个字符串最长为 500 个字符。

例如

abcsffwqfwqsdfasdfTHISISANAPPLEfasdfasdfsdfsadfasdfsdaf4353.54.4fdfsdgg
detertqteqtTHISISANAPPLEafsedfgwetwqrgtwrgtwetpqw4t5osdavm\wert4384..53

输出应该是THISISANAPPLE

听起来很简单,但可能并不简单。

有人有想法吗?

【问题讨论】:

  • 你的代码在哪里?你的想法在哪里?到目前为止你做了什么?这不是代码编写服务。
  • 1.到目前为止,我的方法如下。在一个循环中从一个字符串中取出 10 个字符的子字符串,然后在另一个字符串中查找它们(小于 1o 个字符的匹配将被丢弃)。 2. 在两个字符串中标记匹配字符串的起始位置。 3.尝试通过连续添加一个字符来扩展命中,直到找到不匹配或字符串结尾。 3.选择最长的命中。我不确定这是否是最好、最快的选择。

标签: string perl substring


【解决方案1】:

查看String::LCSS_XS

use String::LCSS_XS 'lcss';

my ($s1,$s2) = (
  "abcsffwqfwqsdfasdfTHISISANAPPLEfasdfasdfsdfsadfasdfsdaf4353.54.4fdfsdgg",
  "detertqteqtTHISISANAPPLEafsedfgwetwqrgtwrgtwetpqw4t5osdavm\wert4384..53"
);
my $longest = lcss ($s1, $s2);
print "$longest\n";

输出

THISISANAPPLE

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2019-12-01
    相关资源
    最近更新 更多