Какой лучший способ удалить дубликаты из строки в PHP (или любом другом языке)?

Я ищу самый известный алгоритм для удаления дубликатов из строки. Я могу придумать множество способов сделать это, но я ищу решение, которое известно как особенно эффективное.

Допустим, у вас есть следующие строки:

  • Lorem Ipsum Lorem Ipsum
  • Lorem Lorem Lorem
  • Lorem Ipsum Dolor Lorem Ipsum Dolor Lorem Ipsum Dolor

Я ожидал бы, что этот алгоритм выведет для каждого (соответственно):

  • Lorem Ipsum
  • Lorem
  • Lorem Ipsum Dolor

Обратите внимание, я делаю это на PHP, если кто-нибудь знает о каких-либо встроенных функциях PHP, которые могут помочь с этим.

Спасибо!

5 ответов

Решение
$arr = explode( " " , $string );
$arr = array_unique( $arr );
$string = implode(" " , $arr);

Не знаю об эффективности, но, возможно, это может сделать:

$str = implode(" ", array_unique(explode(" ", $str)));
$words = array_unique(explode(' ',$text));
echo implode(' ',$words);

если вы хотите улучшить его, вы можете использовать preg_split с \s\W для взрывающихся слов

Лучший способ сделать это:

  1. Сортировать слова внутри строки
  2. Удалить дубликаты, повторяя отсортированные слова

Другая возможность заключается в использовании set конструкция, если ваш язык поддерживает это.

Вы можете попробовать код ниже для удаления дубликата кода из любого предложения

$arr = explode(" " , $string);
$arr = preg_replace('/(\w{2,})(?=.*?\\1)\W*/', '', $arr);
$string = implode(" " , $arr);
Другие вопросы по тегам