문자열 s가 있다고 가정해 보겠습니다. 이 문자열은 어느 지점에서나 정확히 한 번 회전할 수 있습니다. 이 작업을 수행하여 얻을 수 있는 가장 긴 회문 부분 문자열의 길이를 찾아야 합니다.
따라서 입력이 s ="elklev"와 같으면 출력은 7이 됩니다. "el"과 "klev" 사이를 회전하여 "levelk"를 얻을 수 있기 때문입니다. 따라서 여기에서 가장 긴 회문 부분 문자열 길이는 5입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
s2 :=s를 두 번 연결
-
max_len :=0
-
범위 0에서 s − 1까지의 x에 대해 다음을 수행합니다.
-
범위 0에서 s까지의 y에 대해 수행
-
temp :=s2[인덱스 x에서 x + y까지]
-
temp가 회문이고 temp> max_len의 크기인 경우
-
max_len :=임시 크기
-
-
-
-
max_len 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, s): s2 = 2 * s max_len = 0 for x in range(len(s)): for y in range(len(s) + 1): temp = s2[x : x + y] if temp == temp[::−1] and len(temp) > max_len: max_len = len(temp) return max_len ob = Solution() s = "elklev" print(ob.solve(s))
입력
"elklev"
출력
5