是否存在一种快速算法,可以在两个中找到最大公共子串,strings
还是一个NPComplete问题?
在PHP中,我可以在大海捞针中找到针:
\n"; } ?>
我想我可以在其中一个循环中做到这一点,strings
但这将是非常昂贵的!特别是因为我的应用是搜索电子邮件数据库并查找垃圾邮件(即同一个人发送的类似电子邮件).
有没有人有他们可以丢弃的PHP代码?
该similar_text功能可能是你想要的东西.
这计算两个字符串之间的相似性.返回两个字符串中匹配字符的数量
你可能也想看看levenshtein
特别是因为我的应用是搜索电子邮件数据库并查找垃圾邮件(即同一个人发送的类似电子邮件).
我认为你应该关注贝叶斯垃圾邮件推理算法,不一定是最长的常见子串.
http://www.devshed.com/c/a/PHP/Implement-Bayesian-inference-using-PHP-Part-1/
我刚写了一个函数,找到str2中存在的str1中最长的子字符串
public static function getLongestMatchingSubstring($str1, $str2) { $len_1 = strlen($str1); $longest = ''; for($i = 0; $i < $len_1; $i++){ for($j = $len_1 - $i; $j > 0; $j--){ $sub = substr($str1, $i, $j); if (strpos($str2, $sub) !== false && strlen($sub) > strlen($longest)){ $longest = $sub; break; } } } return $longest; }