저는 이미 회문 중 하나 인 ASCII 전용 문자열을 가지고 있습니다. 그렇지 않으면 한 문자를 제거하여 회문을 만들 수 있습니다. 나는 그것이 이미 회문인지 아닌지를 결정할 필요가있다. 그렇지 않다면, 나는 제거 될 필요가있는 인물의 색인을 찾아야한다. 예를 들어 문자열이 'aaba'
인 경우 첫 번째 문자를 제거하여 회문 문자 '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를 분명히 반환 할 수있는 경우를 확인합니다. 예를 들어 홀수 번 발생하는 2 개 이상의 문자가있는 경우 -2를 바로 반환 할 수 있습니다. –
코드는 ASCII 문자로만 작동합니다. – peterSO
@pbabcdefp, 나는 그것을 제거하고 회문으로 만드는 문자가 하나 있다는 것을 알고 있습니다. – demas