Programming Language/Go
Golang Algorithm - longestPalindrome
Yongari
2023. 2. 28. 15:16
문제설명:
문자열을 입력받아 부분 문자열 중 가장 긴 (palindrome)*의 길이를 리턴해야 합니다.
- palindrome: 데이터를 앞에서 뒤로 또는 뒤에서 앞으로 조회한 결과가 동일한 경우
- ' dad ' / ' rar' / ' cac'
- 앞으로 조회해도 결과가 같고, 뒤로 조회해도 결과가 같은 부분문자열 요소를 만든 뒤 그 중 문자열 길이가 가장 긴 길이를 리턴하면 된다. 입출력 예시를 보면 바로 파악할 수 있습니다.
입력
인자 1 : str
- string 타입의 공백이 있는 알파벳 소문자 문자열
출력
- number 타입을 리턴해야 합니다.
주의사항
- 문자열 str의 부분 문자열은 자기 자신을 포함합니다.
- 공백도 회문에 포함될 수 있습니다.
go 소스코드
package main
import "fmt"
func longestPalindrome(s string) int {
if len(s) < 2 {
return len(s)
}
maxLength := 1
start := 0
fmt.Println(start)
for i := 1; i < len(s); i++ {
// 팰린드롬 중심이 한 글자일 때
left := i - 1
right := i + 1
for left >= 0 && right < len(s) && s[left] == s[right] {
length := right - left + 1
if length > maxLength {
maxLength = length
start = left
}
left--
right++
}
// 팰린드롬 중심이 두 글자일 때
left = i - 1
right = i
for left >= 0 && right < len(s) && s[left] == s[right] {
length := right - left + 1
if length > maxLength {
maxLength = length
start = left
}
left--
right++
}
}
return maxLength
}
func main() {
str := "My dad is a racecar athlete"
result := longestPalindrome(str)
fmt.Println("result", result)
str2 := " dad "
result2 := longestPalindrome(str2)
fmt.Println("result", result2)
}
go 입출력
go run longestPalindrome.go
0
result 11
0
result 5