2
Mikle1990Цитата:
Ещё в инете нашёл такую штуку - "Палиндром"
Ну да, это оно и есть.
Цитата:
И кое-где написано, что он может состоять из одной буквы.
И правильно написано. Это тривиальный случай.
Цитата:
Цитата:
По свойству палиндрома можно понять, что каждая буква должна иметь пару (т.е. входить в палиндром четное количество раз), кроме, возможно, одной буквы, которая будет находиться ровно посередине палиндрома (она будет парной “сама с собой”).
А это уже совсем наоборот.
Не вижу противоречия, перечитайте вашу цитату ещё раз.
Цитата:
Помогите please
Честно говоря, я уже успел подзабыть VB и разобраться с вашим кодом мне пока не удалось. Покажу как я бы решал поставленную задачу.
Во-первых, я бы написал функцию
Scan, возвращающую искомый результат или пустую строку в случае отсутствия симметричных строк:
Function Scan(Strings As Collection) As String
Scan = ""
For Each Item In Strings
If Palindrome(Item) Then _
If Len(Item) > Len(Scan) Then _
Scan = Item
Next Item
End Function
Во-вторых, я бы написал предикат
Palindrome, проверяющий симметричность строки:
Function Palindrome(Line) As Boolean
L = 1
R = Len(Line)
Palindrome = False
Do While L < R
If (Mid(Line, L, 1) <> _
Mid(Line, R, 1)) Then _
Exit Function
L = L + 1
R = R - 1
Loop
Palindrome = True
End Function
Ну и наконец попытался бы потестить программульку:
Dim Strings As New Collection
With Strings
.Add "abcba"
.Add "123454321"
.Add "fdghgdf"
.Add "sdfdfsdf"
End With
Result = Scan(Strings)
If Result <> "" Then MsgBox Result
Получилось, как видите, довольно компактно. Правда, ищется лишь одна из наибольших по длине симметричных строк и не производится предварительное "сжатие" строки путем удаления из неё пробелов. Но это все легко исправляется.