LC5.最长回文字串[通俗易懂]

LC5.最长回文字串[通俗易懂]中心扩展法主要思路是每次选一个中点,然后向两边扩展,找出以该中点对应的最长的回文串的长度,然后维护一个全局的最长回文串长度变量。对于奇偶数长度的不同处理方式:expandAroundCenter方法中如果传入同一个点的索引,则表示以该点为中心,对应着探索字符串长度为奇数的情况如果传入两个点的索引,则表示以这两个点之间为中心,对应着探索字符串长度为偶数的情况/***@Classn…

大家好,又见面了,我是你们的朋友全栈君。

中心扩展法

主要思路是每次选一个中点,然后向两边扩展,找出以该中点对应的最长的回文串的长度,然后维护一个全局的最长回文串长度变量。

对于奇偶数长度的不同处理方式:

  • expandAroundCenter方法中如果传入同一个点的索引,则表示以该点为中心,对应着探索字符串长度为奇数的情况
  • 如果传入两个点的索引,则表示以这两个点之间为中心,对应着探索字符串长度为偶数的情况
/** * @Classname Solution5 * @Description TODO * @Date 2019/12/9 9:45 * @Created by Cheng */
public class Solution5 { 
   
    /** * 中心扩展法 * @param s * @return */
    public String longestPalindrome(String s) { 
   
        if (s == null || s.length() < 1) return "";
        int start = 0, end = 0;
        for (int i = 0; i < s.length(); i++) { 
   
            int len1 = expandAroundCenter(s, i, i);
            int len2 = expandAroundCenter(s, i, i + 1);
            int len = Math.max(len1, len2);
            if (len > end - start) { 
   
                start = i - (len - 1) / 2;
                end = i + len / 2;
            }
        }
        return s.substring(start, end + 1);
    }

    private int expandAroundCenter(String s, int left, int right) { 
   
        int L = left, R = right;
        while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) { 
   
            L--;
            R++;
        }
        // 注意此时L和R都已经在有效范围外,所以长度是R-L-1
        return R - L - 1;
    }

}

马拉车

具体思路有必要单独写一篇

/** * @Classname Solution5 * @Description TODO * @Date 2019/12/9 9:45 * @Created by Cheng */
public class Solution5 { 
      
    /** * 马拉车 * @param s * @return */
    public static String longestPalindrome2(String s) { 
   
        //处理字符串
        List<Character> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) { 
   
            list.add('#');
            list.add(s.charAt(i));
        }
        list.add('#');
        int[] dp = new int[list.size()];
        int resLen = 0;
        int resCenter = 0;
        int maxR = 0;
        int maxM = 0;

        for (int i = 1; i <list.size() ; i++) { 
   
            dp[i] = maxR>i?Math.min(dp[maxM*2-i],maxR-i):1;
            while((i-dp[i])>=0 && (i+dp[i])<list.size() && list.get(i+dp[i]) == list.get(i-dp[i]))
                dp[i]++;
            if (i + dp[i] > maxR) { 
   
                maxR = i+dp[i];
                maxM = i;
            }
            if (resLen < dp[i]) { 
   
                resLen = dp[i];
                resCenter = i;
            }
        }
        StringBuilder ret = new StringBuilder();
        for (int i = resCenter-resLen+1; i <=resCenter+resLen-1 ; i++) { 
   
            if(list.get(i)!='#')
                ret.append(list.get(i));
        }
        return ret.toString();
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164003.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 动态页面和静态页面的区别

    动态页面和静态页面的区别静态页面 就是所有页面显示的内容都是写在 HTML 文件当的 如更改内容就是直接修改 HTML 文件 动态页面 就是内容不是写死在 HTML 文件当中的 页面的内容是通过像 asp php jsp cgi 格式文件 那样的编程语言输出 或编写访问数据库程序从数据库中和到的内容的 更改数据库就可以达到修改内容的目的 不用修改 HTML 文件 静态 动态的区分不是以页面有没有动画

    2025年6月6日
    5
  • linux服务器配置jdk环境变量

    因为Java项目部署需要Java运行环境jdk,要在Linux服务器上部署Java项目,就必须线安装好jdk并配置好环境变量;本篇文章记录了如何安装jdk以及配置环境变量。1.下载jdk2.使用sftp工具将下载的jdk文件上传到Linux服务器上3.将jdk文件移动到/usr/local/java路径下mvjdk-8u171-linux-x64.tar.gz…

    2022年4月4日
    66
  • 盘点值得互联网创业者学习的十大做事风格

    盘点值得互联网创业者学习的十大做事风格中国互联网通过第19次互联网报告得出很多数据,综合成一句话就是:“发展速度惊人。”面对如此庞大的市场,国外网络巨头虎视眈眈,总想找机会跨进国门,却因为不了解中国互联网运营规范及网民的习惯,或是犹豫不决或是屡遭搁浅。  而与此同时,国内众多网站正在疯狂抢夺这块蛋糕。在这些网站的背后出谋划策的人都是大众较熟悉的,他们的思路以及做事风格,值得现在的互联网创业者学习、借荐,有相似者可对号入座。

    2022年8月20日
    11
  • 微信小程序-简介[通俗易懂]

    微信小程序-简介[通俗易懂]微信小程序-简介

    2022年4月25日
    52
  • java根据经纬度计算距离_java根据高德经纬度获取地区

    java根据经纬度计算距离_java根据高德经纬度获取地区前一阵项目中,有一个需求:是查找附近的人,其实就是查询某个距离内有多少用户。实现方式还是比较简单的,首先用户在APP上开启定位权限,将自己的经纬度都存储到数据库,然后以此经纬度为基准,以特定距离为半径,查找此半径内的所有用户。那么,如何java如何计算两个经纬度之间的距离呢?有两种方法,误差都在接受范围之内。1、基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不…

    2022年9月23日
    4
  • torchvision 安装出现错误[通俗易懂]

    torchvision 安装出现错误[通俗易懂](base)C:\Users\pxsj_admin>pipinstalltorchvisionCollectingtorchvisionUsingcachedhttps://files.pythonhosted.org/packages/fb/01/03fd7e503c16b3dc262483e5555ad40974ab5da8b9879e164b56c1f4ef6f/tor…

    2022年6月24日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号