Вопрос:
Напишите программу для удаления фрагмента, который встречается во «всех» строках, где фрагмент состоит из 3 или более последовательных слов.
Пример:
Input ::
s1 = "Идет дождь, и я хочу поехать домой.";
s2 = "Идет дождь, и я хочу кататься на лыжах.";
s3 = "Жарко, и я хочу плавать.";
Выход ::
s1 = "Идет дождь, едем домой.";
s2 = "Идет дождь, катаюсь на лыжах.";
s3 = "Идет жаркое плавание.";
Удален фрагмент =" и я хочу "
Программа снова будет проверена большими файлами.Эффективность будет приниматься во внимание.
Допущения: Игнорировать заглавные буквы, знаки пунктуации.но сохранить в выходных данных.
Примечание: Позаботьтесь о таких случаях, как
aaaaabcbcbcbc, где удаление приведет к созданию дополнительных фрагментов.
Мое решение: (который, я думаю, не самый эффективный)
Хэш трех фраз слова в int и сохранить их в массиве, для всех строк.сводится к массиву чисел типа
1 2 3 4 5
3 5 7 9 8
9 3 1 79
Проблема сводится к пересечению массивов.
сортировка массивов.(k * nlogn)
сохранить k указателей.если все равные совпадения найдены.иначе приращение указателя указывает на наименьшее значение.Решить для Примечание выше.Я думал о том, чтобы выполнить отложенное удаление, то есть пометить фразы для удаления и удалить в конце.
Есть ли случаи, когда моё решение может не работать?Можем ли мы оптимизировать мое решение / найти лучшее решение?