장도 길이의 회문 서브(과 함께 고유한 인접한 문자를 제외한 센터 2 문자)
-
29-09-2020 - |
문제
당신은 주어진 문자열 S 를 포함하는 소문자는 영어 자입니다.를 찾을 필요가 길이의 가장 큰 시퀀스의 S 을 만족시키는 다음과 같은 패턴:X1,X2,X3...Xn,Xn,...X3,X2,X1 는 시는 일부의 문자 S.유일한 제약은 없다는 것에 인접한 문자해야하는 경우를 제외하고 동일 Xn,그 사이입니다!= ×(I+1)모든 1<=i< n
입력:문자열:S
출력:정수:2n
제약:1<=|S|<=10^3
샘플 입력 1:"acdbdea"
샘플 출력 1:4
설명:"다"가장 긴 시퀀스는 다음 지정된 패턴이다.
샘플 입력 2:"abbacdeedc"
샘플 출력이 2:6
설명:"cdeedc"가장 긴 시퀀스는 다음 지정된 패턴이다.
샘플 입력 3:"즐긴다"
샘플 출력 3:0
설명:No 서브 다음과 같이 주어진 패턴이다.
이 질문에서 요구하는 코딩 인터뷰는 방법을 해결합니다.내가 이해하는 방법을 찾기 위해 가장 긴 회문 시퀸스지를 구현하는 방법의 고유한 인접한 문자 부분입니다.도와 주시기 바랍니다.의사는 괜찮습니다.
해결책
황금 규칙
여기에는 골든 규칙의 동적 프로그래밍입니다.
을 때는 솔루션을 작은 서브 문제들 결합할 수 없습으로 솔루션 크 서브 문제들 때문에 없는 정보,확장 서브 문제들에 의해 매개 변수 추가 제공하는 정보가 없습니다.
첫 번째 시도
$S$ 의 순서 $n$ 문자 또는 $S[0:n].$
자 $L[i][j]$ 이 될 길이의 긴 회문 시퀸스 $S[i:j]$.그것은 쉽게 파악하는 경우 기본이고,에 의해 증가 $i$ 그리고/또는 감소 $j$, 고,재발관계에 대한 $L[i][j]$.
지금 추가 조건의 심지어는 길이입니다.자 $E[i][j]$ 이 될 길이의 긴도 길이의 회문 시퀸스 $S[i:j]$.우리는 알 수 있습 base 경우 재발관계에 대한 $E[i][j]$, 비슷한 그들의 $L[i][j]$.
지금 추가 조건의 고유한 인접한 문자,즉,아무 편지를 나타날 수 있 두 번 연속를 제외하고 편지에서 센터도 있습니다.자 $D[i][j]$ 이 될 길이의 긴도 길이 뚜렷한 초고속 무선 인터넷을 무료로 이용-letter 회문 시퀸스 $S[i:j]$.할 수 있듯이 지적했다,우리는 수 없는 그 밖의 재발관계에 대한 $D[i][j]$, 이후,확장 같은 시퀀스를 더 이상 하나가 소개하는 문자를 반복.
황금 규칙을 구출하기 위해 제공됩니다.다른 매개변수를 추가을 분류하는 문자의 끝에서 가장 긴 시퀸스 지금까지 발견,그래서 우리는 결정할 수 있는 방법을 확장하는 시퀀스 제대로.
자 $D[i][j][\lambda]$ 이 될 길이의 긴도 길이 뚜렷한 초고속 무선 인터넷을 무료로 이용-letter 회문 시퀸스 $S[i:j]$ 로 끝나는 letter $\lambda$.는 것입니다,우리는 계산 $D[i][j][ ext{'}a ext{'}]$, $D[i][j][ ext{'}b ext{'}]$, $D[i][j][ ext{'}c ext{'}]$, $\cdots$, $D[i][j][ ext{'}z ext{'}]$.
최종 대답은 더 큰의 $\max_\lambda D[0][n-1][\lambda]$ 고 $0$.
가정 먼저 $ ext{'}a ext{'}$ 에 $S$ 거나 그 이후 $S[i]$ 에 나타납니다 $S[\vec{i_{ ext{'}a ext{'}}}]$.가정 먼저 $ ext{'}a ext{'}$ 에 $S$ 에 나타납니다 $S[\overleftarrow{j_{ ext{'}a ext{'}}}]$ 기 $S[j]$ 검색니다. $\vec{i_{ ext{'}a ext{'}}}$ 나 $\overleftarrow{j_{ ext{'}a ext{'}}}$ 설정 $-1$ 는 경우 $ ext{'}a ext{'}$ 이 발견되지 않는 각각합니다.우리는 우리를 위해, $j\ge i+2$,
$$D[i][j][ ext{'}a ext{'}]=\시작하느니라 \max(2,2+\max_{\mu\지 않= ext{'}a ext{'}}D[\vec{i_{ ext{'}a\텍스트{'}}}+1][\overleftarrow{j_{ ext{'}a ext{'}}}][\mu])& ext{if}0\le\vec{i_{ ext{'}a ext{'}}}\lt\overleftarrow{j_{ ext{'}a ext{'}}},\\ -1& ext{그렇지 않으면,}\\ \끝{경우}$$ 가 $\mu$ 실행 모두를 통해 영어 소문자.
기본 경우 $$D[i][i][ ext{'}a ext{'}]=0.$$
일반화 $ ext{'}a ext{'}$ 변수 $\lambda$, 을 작성할 수 있습니다발과 관련과에 대한 기본 케이스 $D[i][j][\lambda]$.
참고로 추가 정보를 구현에 $\lambda$ 매개 변수를 쉽게 추 되풀이다.
이 시도는 성공적인,우리는 더 할 수 있습니다.
두 번째 시도
우리는 우리를 단순화할 수 있습 서브 문제들.
자 $F[i][j]$ 의 길이장 같은 시퀀스에서 시작 $S[i]$ 에서 끝나 $S[j]$.그런 다음 우리는
$$F[i][j]=\시작하느니라 \max(2,2+\max_{\mu\지 않=S[i]}F[\vec{i_\mu}][\overleftarrow{j_\mu}])& ext{if}S[i]=S[j],\\ -1& ext{그렇지 않으면,}\\ \끝{경우}$$ 가 $-1$ 을 의미"를 찾을 수 없습니다".모두 소문자 영문자 $\mu$, $S[\vec{i_\mu}]$ 첫 번째 $\mu$ 후 나타나는 $S[i]$, 고 $S[\overleftarrow{j_\mu}]$ 첫 번째 $\mu$ 앞에 나타나는 $S[j]$ 검색니다.는 경우 그들 중 하나를 찾을 수 없는 장기 $F[\vec{i_\mu}][\overleftarrow{j_\mu}]$ 은 무시됩니다.
최종 대답은 더 큰의 $\max_{i,j}F[i][j]$ 0.