Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Строки и подстроки


Автор: brejnev 17.2.2006, 10:15
Помогите придумать вот такой алгоритм.
На вход поступает строка, пусть такая "BABBAABBAB", на выходе будет такая вещь
Let(B)
Let(A)
Let(B)
Let(B)
Let(A)
Repeat(4)
Let(B)
End
То есть алгоритм выводит неповторяющиеся подряд символы как есть, но если встречается повторяющаяся подряд подстрока, то она не выводитя, вмето нее Repeat.

Автор: Akina 17.2.2006, 17:31
Пусть выведено уже N символов.

Делим строку на 2 части - символы 1-N (s1) и остаток (s2). Если s2 короче s1 - s1=Right(s1,len(s2)).
Сравниваем s1 и s2.
Если равны - пишем Repeat(Len(s1)), затем N=N+Len(s1) и повторяем.
Иначе
Если Len(s1)=2 - пишем Let(Left(s2,1)), затем N=N+1 и повторяем.
Иначе s1=mid(s1,2); s2=left(s2,len(s1))

Повторяем до N=Len(начальная_строка)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)