상세 컨텐츠

본문 제목

Golang Algorithm - longestPalindrome

Programming Language/Go

by 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

'Programming Language > Go' 카테고리의 다른 글

Golang Algorithm - Rabin Karp  (0) 2023.03.02
Golang Algorithm - countIslands  (0) 2023.03.01
Golang Algorithm - jobAllocation  (0) 2023.02.27
Golang Algorithm - decompression  (0) 2023.02.24
Golang - libp2p를 이용한 chat 실습  (0) 2023.02.23

관련글 더보기