2014-01-21 100 views
0

我想獲得perl腳本的提示,該腳本找到兩個字符串中存在的最長公共子字符串。每個字符串最長爲500個字符。找到兩個字符串中的匹配字符串

例如

abcsffwqfwqsdfasdfTHISISANAPPLEfasdfasdfsdfsadfasdfsdaf4353.54.4fdfsdgg 
detertqteqtTHISISANAPPLEafsedfgwetwqrgtwrgtwetpqw4t5osdavm\wert4384..53 

輸出應該THISISANAPPLE

聽起來很容易,但是可能不是微不足道的。

任何人有想法?

+2

哪裏是你的代碼?你的想法在哪裏?到目前爲止你做了什麼?這不是一個代碼寫入服務。 –

+0

1.我目前的做法如下。在一個循環中從一個字符串中取出10個字符的子字符串,並在另一個字符串中查看(小於10個字符的字符匹配被丟棄)。 2.在兩個字符串中標記匹配字符串的起始位置。 3.嘗試通過連續添加一個字符來擴展匹配,直到找到不匹配或字符串結尾。 3.選擇最長的命中。我不確定這是否是最好,最快的選擇。 – Xespok

回答

4

檢查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 
+0

謝謝,我希望有人已經爲此編寫了腳本。 – Xespok

相關問題