每周一道算法题011:最长公共子串
问题: 求以下几组单词的最长公共子串的长度 1.fish和fosh 2.fish和hish 3.fish和vista 思路: 可以用表格法,横纵坐标分别是两个单词,如果字符相同,就用左上角的数字加1,最后取表格中的最大值。 解答: php: <?php // 找出两个单词的最长公共子串 function findLongestSubString($word1, $word2) { $len1 = strlen($word1); $len2 = strlen($word2); $cell = array(); for ($i = 0; $i < $len1; $i++) { for ($j = 0; $j < $len2; $j++) { // 如果两个字符相同,则取其左上角的数值+1 if ($word1[$i] == $word2[$j]) { if ($i > 0 && $j > 0) { $cell[$i][$j] = $cell[$i - 1][$j - 1] + 1; } else { $cell[$i][$j] = 1; } } else { $cell[$i][$j] = 0; } } } printCell($word1, $word2, $cell); $maxLength = findMaxValue($cell); echo $maxLength . "\n"