найти похожее вхождение строки в массиве

#php

#php

Вопрос:

допустим, мы получили массив этого

 $t = array('red - blah blah', 'yellow @ blah blah', 'blue > blah blah');
 

Как нам найти похожие вхождения в этом массиве? В этом случае это было бы «бла-бла». Спасибо!

Комментарии:

1. итак, если у вас есть: ‘red — blah blah2’ — это будет просто blah или blah blah (без 2)?

Ответ №1:

Для простого решения вы можете попробовать перебрать возможные подстроки первой строки (начиная с самых длинных), а затем выполнить поиск в других строках; если найдено, это ваш результат. Однако этот подход будет довольно трудоемким.

 $firstString = $t[0];
for ($len = strlen($firstString); $len > 0; $len--) {
    for ($start = 0; $start   $len <= strlen($firstString); $start  ) {
        $possibleCommonSubstring = substr($firstString, $start, $len);
        for ($idx = 1; $idx < count($t); $idx  ) {
            if (!strpos($t[$idx], $possibleCommonSubstring)) {
                continue 2;
            }
        }
        return $possibleCommonSubstring;
    }
}
 

Более общее обсуждение и более эффективные решения можно найти здесь: http://en.wikipedia.org/wiki/Longest_common_substring_problem