'
Private Function CountCharsToPalyndrome(ByVal text As String) As Integer
Dim addeddirect As String = text
Dim addedreverse As String = New String(text.AsEnumerable.Reverse().ToArray())
Dim returnval As Integer = addeddirect.Length
' Direct order, cutting from the end
Dim teststring As String
Dim charscut As Integer = 1
Do While charscut < text.Length
' Direct order, cutting from the end
teststring = addeddirect.Substring(0, addeddirect.Length - charscut)
If IsPalyndrome(teststring & text) OrElse IsPalyndrome(text & teststring) Then
returnval = teststring.Length
End If
' Direct order, cutting from the beginning
teststring = addeddirect.Substring(charscut)
If IsPalyndrome(teststring & text) OrElse IsPalyndrome(text & teststring) AndAlso
returnval > teststring.Length Then
returnval = teststring.Length
End If
' reverse order, cutting from the end
teststring = addedreverse.Substring(0, addedreverse.Length - charscut)
If IsPalyndrome(teststring & text) OrElse IsPalyndrome(text & teststring) AndAlso
returnval > teststring.Length Then
returnval = teststring.Length
End If
' reverse order, cutting from the beginning
teststring = addedreverse.Substring(charscut)
If IsPalyndrome(teststring & text) OrElse IsPalyndrome(text & teststring) AndAlso
returnval > teststring.Length Then
returnval = teststring.Length
End If
charscut += 1 ' 1 less character
Loop
Return (returnval)
End Function
Private Function IsPalyndrome(ByVal text As String) As Boolean
Dim firsthalf As String = String.Empty
Dim middle As String = String.Empty
Dim lasthalf As String = String.Empty
' Determine if we have odd or even number of characters
If (text.Length Mod 2) = 0 Then
firsthalf = text.Substring(0, text.Length \ 2)
lasthalf = text.Substring(text.Length \ 2)
Else
firsthalf = text.Substring(0, (text.Length - 1) \ 2)
middle = text.Substring(firsthalf.Length, 1)
lasthalf = text.Substring((firsthalf.Length + 1))
End If
Return New String(lasthalf.AsEnumerable.Reverse().ToArray()).Equals(firsthalf)
End Function