Другие предложили таблицы псевдонимов, но это немного громоздко, если вы планируете обрабатывать произвольное количество пользователей. Обработка верхнего и нижнего регистра относительно проста;когда вы сохраняете то, что набрал человек, сохраняйте копию всего этого в одном случае, чтобы использовать его для сравнения. Таким образом, ваша программа может обращаться с ними так, как они делали вначале. Вместо таблицы ваша программа может кодировать ряд правил замещения, которые она может принять в строке: т.е. для y;n для nn и суффиксы, которые можно игнорировать.
В зависимости от количества правил, вы можете рассмотреть упорядочение правил как функцию нормализации, которую вы применяете универсально - так, например, замените все то есть на y, удалитевсе игнорируемые суффиксы и т. д. - в вашей сохраненной копии строки;примените ту же функцию нормализации к входу, а затем просто сравните их, а не необработанные.
Конечно, здесь есть проблемы, в которых вы не захотите применять большинство правил в начале имени. и некоторые были бы уместны, только если они были применены к мягкому гласному, а не к жесткому гласному;который вводит алгоритм soundex, который переводит слова в их фонетический эквивалент, так что «наука» и «сцена» становятся дальше друг от друга, чем может предполагать их расстояние редактирования. К этому моменту вы в значительной степени внедрили корректор орфографии.
Ваша формулировка проблемы обманчиво проста;в этой области было проведено много исследований, и все же полезные помощники при наборе текста - далеко не все.