|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2007, 18:10 | #1 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Палиндром
Дано число 1<=N<=14. Затем следуют N строк, состоящие из малых латинских букв. Их от 1 до 30. Найти минимальный палиндром, содержащий все эти строки в качестве подстрок.
|
09.11.2007, 19:42 | #2 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Возможно, не понял задачу, но предложу решение: объявляем множество типа char, каждую новую строку посимвольно проверяем на содержание во множестве. Да - добавляем, нет - берем следующий символ.
Познавая других, мы познаем себя.
С'est la vie... Последний раз редактировалось SuperVisor; 09.11.2007 в 19:45. |
09.11.2007, 20:22 | #3 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
напомню, что палиндром это строка, для которой выполняется :
S[i]=S[Length-i+1], для i от 1 до Length div 2
Берегите друг друга!
|
10.11.2007, 02:48 | #4 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
SuperVisor, не это чё-то не туда понесло.
|
10.11.2007, 09:02 | #5 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
полиндром - это такое слово которое в обратном порядке читается так же как в нормальном
например: "абба", "12321" , "qwerewq" - это полиндромы функция которая говорит полиндром ли строка: Код:
Код:
|
10.11.2007, 18:04 | #6 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Я потому сразу и оговорился, что мог не понять условие задачи.
В таком случае нужно начинать с наибольшей строки и искать в ней искомые подстроки. После, если в наибольшей строке не найдены все искомые строки путем сложения попытаться вывести остальные. Когда результат достигнут мы получим строку с наименьшим возможным количеством символов. После стоит попытататься найти гепотетическую середину палиндрома и от нее достроить палиндром.
Познавая других, мы познаем себя.
С'est la vie... |
10.11.2007, 20:03 | #7 | |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
Код:
Цитата:
2. проверить не полиндром ли строка. 3. иначе нужно расширять с 2 строн. (слева и справа) найти сначала наилучший 'центр', чтобы количество добавляемых символов было миниальным [если наилучего нет, можно весь хвост с одной стороны добавлять] P.S. надеюсь кто-нить понял мою мысль, особенно Carbon Virtson, ну ты-то чему молодежь учишь? Есть кнопка "Правка".
Берегите друг друга!
Последний раз редактировалось SuperVisor; 10.11.2007 в 21:03. |
|
10.11.2007, 20:37 | #8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Это потому, что мне показалось, что в задаче имеется в виду палиндром, в который любая исходная строка может входить не более одного раза. |
|
10.11.2007, 21:04 | #9 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Не обязательно не более 1 раза. Дело в том, что слова могут пересекать центр или находиться в разных половинах. Тогда не получится формировать сначала половину, а затем зеркально её отображать.
|
12.11.2007, 14:32 | #10 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
SuperVisor:
мой первый пост - ответ на алгоритм rpy3uH и никак не связан со вторым. затем мне пришла мысль, и я написал алгоритм.
Берегите друг друга!
|