удалить фрагменты в предложении [головоломка]

Вопрос:

Напишите программу для удаления фрагментов, встречающихся во" всех "строках, где фрагмент это 3 или более последовательных слова.

Пример:

Input ::

s1 = "Идет дождь, и я хочу ехать домой.";

s2 = "Идет дождь, и я хочу покататься на лыжах.";

s3 = "Жарко, и я хочу пойти поплавать.";

Вывод ::

s1 = "Идет дождь, ехать домой.";

s2 = "Идет дождь, катайтесь на лыжах.";

s3 = "Похоже, купаться.";

Удален фрагмент = "и я хочу"

Программа снова будет тестировать большие файлы. Будет учтена эффективность.

Допущения: Игнорировать заглавные буквы и знаки препинания. но сохранить на выходе.

Примечание: Позаботьтесь о случаях вроде

a a a a a b c b c b c b c, когда удаление приведет к созданию большего количества фрагментов.

Мое решение: (которое я считаю не самым эффективным)

  1. Хешируйте трехсловные фразы в int и сохраняйте их в массиве для всех строк. сводится к массиву чисел вроде

    1 2 3 4 5
    3 5 7 9 8
    9 3 1 7 9

Проблема сводится к пересечению массивов.

сортировать массивы. (k * nlogn)

сохранить k указателей. если все равно найдены совпадения. else увеличивает указатель, указывающий на наименьшее значение. Решить для примечания выше. Я думал о ленивом удалении, т.е.Отметьте фразы для удаления и удалите в конце.

Могут ли мои решения не сработать? Можем ли мы оптимизировать мое решение / найти лучшее решение?

5
задан Kshitij Banerjee 2 February 2012 в 14:19
поделиться