题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

import java.util.Scanner;
//最长回文子串问题:中心扩散法
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Main main=new Main();
        while (in.hasNext()) {
            String str = in.nextLine();
            System.out.println(main.longestPel(str));
        }
    }
    public int longestPel(String s)
    {
        int res=0;
        for (int i=0;i<s.length();i++)
        {
            res=Math.max(res,extend(s,i,i));
            res=Math.max(res,extend(s,i,i+1));
        }
        return res;
    }
    //以i和j作为中心向外扩散的回文串的长度
    public int extend(String s,int i,int j)
    {
        while (i>=0 && j<s.length() && s.charAt(i)==s.charAt(j))
        {
            i--;
            j++;
        }
        return j-i-1;
    }
}

最长回文子串问题

中心扩散法:从字符串的第一个字符开始依次选择,i,i, 和i,i+1作为中心向外扩散获得以该索引作为中心得到的子串的最长长度。

当整个字符串遍历一遍之后,不断更新记录到的最长子串长度。

动态规划法:

设置一个二维动态规划数组,如果dp[i][j]表示以i开头j结尾的字符串是否是回文串,如果是的话记录其长度并不断更新回文串的最大长度。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务