В случае вашего приложения вы, вероятно, должны подумать об адаптации некоторых алгоритмов из биоинформатики.
Например, вы могли бы сначала объединить свои строки, убедившись, что все разделители являются пробелами или чем-то еще, что вам нравится, так что вы бы сравнили «Алан Тьюринг» с «Тьюринг Алан». Затем разделите одну из строк и выполните алгоритм точного сопоставления строк (например, алгоритм Horspool ) с частями против другой строки, считая количество подходящих подстрок.
Если вы хотите найти совпадения, которые просто похожи, но не равны, то что-то вроде локального выравнивания может быть более подходящим, поскольку оно дает оценку, которая описывает сходство, но Смит ссылается -Waterman-Algorithm, вероятно, немного излишним для вашего приложения и даже не самый лучший из доступных локальных алгоритмов выравнивания.
В зависимости от вашей среды программирования существует вероятность того, что реализация уже доступна. Лично я в последнее время работал с SeqAn , который является библиотекой биоинформатики для C ++ и определенно обеспечивает желаемую функциональность.
Ну, это был довольно абстрактный ответ, но я надеюсь, что он укажет вам правильное направление, но, к сожалению, он не дает вам простой формулы для решения вашей проблемы.