2016-11-28 7 views
2

Пусть две строки:Поиск длинный (или все) пересечение (ы) в уровне слов из двух строк в Swift 3

  • String 1: «Когда-то была прекрасная принцесса по имени Белоснежка .. .»
  • String 2:„Конечно, это было время для прекрасной принцессы, чтобы стать одним ...“

Что такое лучший способ найти самую длинную„пересечение“(или все возможные пересечения) в уровень слова двух строк в Свифт? В предыдущем случае это было бы: «красивая принцесса».

+2

Пересечение уровня 'слово' или' характер'? – t4nhpt

+0

Пересечение для 'уровня слова', я добавлю это к вопросу. –

+1

1) Разделите строки на два массива слов. 2) Внедрите алгоритм для [Самая длинная общая проблема подстроки] (https://en.wikipedia.org/wiki/Longest_common_substring_problem) и примените ее к двум массивам. –

ответ

0

Вы можете использовать библиотеку lib, которая вычисляет разницу двух текстов. Я использую DiffMatchPatch, что работает для меня.

Чтобы заставить его работать на уровне слов, вы можете сделать две вещи:

  • Получить результат и посмотреть, является ли границы бегуна внутри слова. В таком случае сократите бегун до границ слова.

  • Перевести каждое отдельное слово в единый символ UTF-16 (то, что используется NSString), а затем использовать diff для этого текста. Поскольку каждое слово стало буквой, результат семантически будет содержать слова вместо букв.