5. 최장 메모 문자열

class Solution {
    public String longestPalindrome(String s) {
        int len=s.length();
        if(len<1){
            return "";
        }
        int res=1,start=0;
        int[][] dp=new int[len][len];
        for(int i=0;i<len;i++){
            dp[i][i]=1;
            if(i<len-1){
                if(s.charAt(i)==s.charAt(i+1)){
                    dp[i][i+1]=1;
                    start=i;
                    res=2;
                }
                else{
                    dp[i][i+1]=0;
                }
            }
        }
        for(int i=2;i<len;i++){
            for(int j=0;j+i<len;j++){
                if(s.charAt(j)==s.charAt(i+j)&&dp[j+1][i+j-1]==1){
                    dp[j][i+j]=1;
                    start=j;
                    res=i+1;
                }else{
                    dp[j][i+j]=0;
                }
            }
        }
        return s.substring(start,start+res);
    }
}

이 문제는 동적 기획 사상을 사용한다. dp[i+1][j-1]=1&s[i]==s[j]이면 dp[i][j]=1로 s(i, j)를 회문열로 표시한다.위의 for 순환에서 dp 그룹을 초기화하여 문자열 s가 두 문자마다 회문열인지 판단합니다.다음 두 개의 for 순환은 문자열 S의 각 k개의 문자가 회문열(k=3,4,5,...S.length)인지 판단하고 가장 큰 회문열의 길이와 이 길이의 모든 회문열 중 S의 끝에 가장 가까운 회문열의 시작 인덱스를 기록한다.마지막으로 이 메모를 되돌려줍니다.

좋은 웹페이지 즐겨찾기