У меня есть только ASCII-строка, которая либо уже является палиндром, либо может быть сделана палиндром, удалив один символ. Мне нужно определить, является ли это уже палиндром, а если нет, мне нужно найти индекс символа, который нужно удалить. Например, если строка 'aaba'
, то ее можно сделать в palindrome 'aba'
, удалив первый символ, поэтому мне нужно вернуть 0
.Palindrome - возможно ли сделать мой код быстрее
У меня есть рабочий код, но мне интересно, можно ли это сделать быстрее, потому что мне нужно работать со многими длинными строками.
Вот мой код:
package main
import (
"fmt"
)
func Palindrome(s string) bool {
var l int = len(s)
for i := 0; i < l/2; i++ {
if s[i] != s[l - 1 - i] {
return false;
}
}
return true
}
func RemoveChar(s string, idx int) string {
return s[0:idx-1] + s[idx:len(s)]
}
func findIdx(s string) int {
if Palindrome(s) {
return -1
}
for i := 0; i < len(s); i++ {
if Palindrome(RemoveChar(s, i + 1)) {
return i
}
}
return -2
}
func main() {
var s string = "aabaab"
fmt.Println(findIdx(s))
}
Подавляющее большинство строк вернет -2, потому что вы не можете сделать их палиндром, удалив только одну букву. Я бы начал findIdX, сначала проверив случаи, когда вы можете, очевидно, вернуть -2 без более детальной проверки - например, если есть более двух символов, которые встречаются нечетно, вы можете сразу вернуться -2. –
Ваш код работает только для символов ASCII. – peterSO
@pbabcdefp, я точно знаю, что есть одна буква для удаления и сделать ее палиндром – demas