여기에 사용 된 기본 방법은, 팽창의 중심, 즉 중앙은 단일 문자 일 수 있기 때문에, 그와 같은 ABBC 두 글자와 유사 할 수 있으며, 전체 문자열을 통과하도록하고, 그것을 그 지점 논의 할 필요가있다 :
단일 문자 인 경우 n 개의 케이스가있는 경우, 두 글자 경우, N-1의 경우가 있었다. 따라서, 경우에 병용은 2N-1
이어서, 각 시험은 중심을 연장시키고, 최종적으로 긴 팔린 드롬 서열을 결정 하였다.
약 시작하고 직접적으로 원하는 캐릭터를 얻을 SUBSTR 함수 감산의 중심의 위치를 결정.
다음 코드는 다음과 같습니다
1 개 급 솔루션 { 2 공개 : 3 의 INT expandAroundCenter ( 문자열 S가 되는 int 왼쪽 int로 오른쪽) -4- { 5 의 INT L = 왼쪽, R = 오른쪽; 6 동안 (L> = 0 && R <s.length () && S [L] == S [R]) 7 { 8 메디슨 ; 9 R ++ ; 10 } 11 리턴 RL- 1 ; 12 } 13 14 문자열 longestPalindrome ( 문자열 들) { 15 일 경우 (s.length () < 1 ) 16 { 17 반환 "" ; 18 } 19 INT의 시작 = 0 , 최종 = 0 ; (20) 에 대한이 ( int로 난 = 0 ; i가 s.length ()을 <; 내가 ++ ) 21 { 22 INT LEN1 = expandAroundCenter (S, I, I); 23 INT LEN2 expandAroundCenter = (S, I, I + 1 ); 24 INT LEN =맥스 (LEN1, LEN2); 25 일 경우 (렌> 종료 - 시작) 26 { 27 개시 = 1 - (len- 1 ) / 2 ; 28 단 = 1이 + (LEN) / 2 ; 29 } 30 } 리턴 s.substr (시작, 종료 - 시작 + 1 ); 31 } 32 33 };
최종 시간 복잡도는 O (N ^ 2)