JAVA朴素解法 简单dp 注意顺序

字符串运用-密码截取

http://www.nowcoder.com/questionTerminal/12e081cd10ee4794a2bd70c7d68f5507

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String a=in.next();
        System.out.println(getString(a));
    }
    public static  int getString(String a){
        char[] chararr = a.toCharArray();
        int len=chararr.length;
        if(len<2) return len;
        int start=0;
        int end=0;
        int maxLen=0;
        boolean[][] dp=new boolean[len][len];
        /*这部分可不要
        for(int i=0;i<len;i++){
            dp[i][i]=true;
        }*/
        for(int i=len-1;i>=0;i--){
            for(int j=i;j<len;j++){
                if(chararr[i]==chararr[j]){
                    if(j-i<3) dp[i][j]=true;
                    else{
                        dp[i][j]=dp[i+1][j-1];
                    }
                    if(dp[i][j]){
                        if(j-i+1>maxLen){
                            maxLen=j-i+1;
                            start=i;
                            end=j;
                        }
                    }
                }
            }//for j end
        }//for i end

        return maxLen;
    }
}
全部评论
这个解法比其他解法更奇妙,dp[i][j]表示第i到第j位置的子串是否是回文子串,i递减,j递增,利用dp[i][j]=dp[i+1][j-1]动态规划来确定当前子串的dp[i][j]。
1 回复 分享
发布于 2023-02-01 10:13 广东

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务