(Спасибо greg0ire ниже за помощь в ключевых концепциях)
Задача: Создайте программу, которая находит все подстроки и "тегирует" их с атрибутами цвета (эффективно выделяя их в XML).
Правила:
- Это нужно делать только для подстрок длиной 2 или более.
- Подстроки - это просто строки последовательных символов, которые могут включать неалфавитные символы. Обратите внимание, что пробелы и другие знаки пунктуации не ограничивают подстроки.
- Символьный корпус нельзя игнорировать.
- "Выделение" должно выполняться путем пометки подстроки в XML. Ваша маркировка должна иметь вид
<TAG#>theSubstring</TAG#>
, где#
- это положительное число, уникальное для этой подстроки и одинаковых подстрок. - Приоритет алгоритма состоит в том, чтобы найти самую длинную подстроку, а не сколько раз она совпадает с текстом.
Примечание. Порядок пометки, показанный в приведенном ниже примере, не важен. Его просто используется OP для ясности.
Пример ввода:
LoremIpsumissimplydummytextoftheprintingandtypesettingindustry.LoremIpsumhasbeentheindustry'sstandarddummytexteversincethe1500s,whenanunknownprintertookagalleyoftypeandscrambledittomakeatypespecimenbook.
Частично правильный выход (OP не может полностью полностью заменить в этом примере)
<TAG1>LoremIpsum</TAG1>issimply<TAG2>dummytext</TAG2>of<TAG5>the</TAG5><TAG3>print</TAG3>ingand<TAG4>type</TAG4>setting<TAG6>industry</TAG6>.<TAG1>LoremIpsum</TAG1>hasbeen<TAG5>the</TAG5><TAG6>industry</TAG6>'sstandard<TAG2>dummytext</TAG2>eversince<TAG5>the</TAG5>1500s,whenanunknown<TAG3>print</TAG3>ertookagalleyof<TAG4>type</TAG4>andscrambledittomakea<TAG4>type</TAG4>specimenbook.
Ваш код должен иметь возможность обрабатывать крайние случаи, например:
Пример ввода 2:
hello!TAG!</hello.TAG.</
Пример 2:
<TAG1>hello</TAG1>!<TAG2>TAG</TAG2>!<TAG3></</TAG3><TAG1>hello</TAG1>.<TAG2>TAG</TAG2>.<TAG3></</TAG3>
Победитель:
- Самое элегантное решение выигрывает (судя по другие комментарии, upvotes)
- Bonus точки/рассмотрение решений использование сценариев оболочки
Незначительные разъяснения:
- Вход может быть жестко закодирован или прочитан из файла
- Критерии остаются "элегантностью", которая, по общему признанию, немного расплывчата, но также включает в себя простое количество символов и строк. Комментарии других и/или upvotes также указывают на то, как сообщество SO рассматривает проблему.