https://school.programmers.co.kr/learn/courses/30/lessons/12904
팰린드롬 문제이다.
투 포인터를 활용한 문자열 탐색
투 포인터 개념을 활용해 팰린드롬을 찾는다.
for(i in 0 until N - 1) {
val len1 = s.twoPointer(i, i) // 홀수길이의 팰린드롬 찾기
val len2 = s.twoPointer(i, i + 1) // 짝수길이의 팰린드롬 찾기
val curMaxLen = Math.max(len1, len2)
if(curMaxLen > (end - start + 1)) {
start = i - (curMaxLen - 1) / 2
end = i + curMaxLen / 2
}
}
for
문을 통해 모든 부분을 탐색하며 홀수, 짝수 팰린드롬을 찾아낸다.
import java.util.*
class Solution {
private var N = 0
fun solution(s: String): Int {
var answer = 0
// 투 포인터
N = s.length
println(N)
if(N == 1) {
answer = 1
}
var start = 0
var end = 0
for(i in 0 until N - 1) {
val len1 = s.twoPointer(i, i)
val len2 = s.twoPointer(i, i + 1)
val curMaxLen = Math.max(len1, len2)
answer = Math.max(answer, curMaxLen)
}
return answer
} // End of solution()
private fun String.twoPointer(parmLeft : Int, parmRight : Int) : Int {
val curString = this
var left = parmLeft
var right = parmRight
while(left >= 0 && right < N && curString[left] == curString[right]) {
left--
right++
}
return right - left - 1
} // End of twoPointer()
} // End of Solution class