博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5. Longest Palindromic Substring
阅读量:5941 次
发布时间:2019-06-19

本文共 2006 字,大约阅读时间需要 6 分钟。

一、题目

  1、审题:

    

  2、分析

    求字符串最长的回文子串

 

二、解答

  1、分析: 

   方法一:

    依次遍历字符串的字符,同时将该字符作为中间字符,向左右延伸进行比较,选出最长回文子串,此时回文子串有奇数偶数之分,为了方便,可以在所给字符串相隔字符之间均加上字符“#", 从而化为只有奇数的一种情况,最终将所求出的最长回文子串的‘#’处理即可。

  

class Solution {    public String longestPalindrome(String s) {        int len = s.length();        if(len == 1 || len == 0)            return s;        int maxLen = 1, start, end, median = 1;        StringBuffer sb = new StringBuffer("#");        for (int i = 0; i < len; i++) {            sb.append(s.charAt(i)).append("#");        }        String ss = sb.toString();        int len2 = ss.length();        for (int i = 1; i < len2; i++) {            int result = 1;            for (start = i - 1, end = i + 1; start >= 0 && end < len2 ; start--, end++) {                if(ss.charAt(start) == ss.charAt(end))                    result += 2;                else                    break;            }            if(maxLen < result) {                maxLen = result;                median = i;            }        }        String s2 = ss.substring(median - maxLen/2, median + maxLen/2 + 1);        return s2.replace("#", "");    }}

   

  方法二:

    回文子串分奇数、偶数长度两种情况。

  

class Solution {    public String longestPalindrome(String s) {        int len = s.length();        if(len < 2)            return s;        int[] arr = new int[]{0,0};     // arr[0] = startIndex, arr[1] = maxLen;        for (int i = 0; i < len - 1; i++) {            findLongestPal(s, i, i, arr); // 奇数            findLongestPal(s, i, i+1, arr); // 回文子串为偶数        }        return s.substring(arr[0], arr[1] + arr[0]);    }    public void findLongestPal(String s, int start, int end, int[] arr) {        while(start >= 0 && end < s.length()                && s.charAt(start) == s.charAt(end)) {            end++;            start--;        }        if(arr[1] < end - start - 1) {  // 因为 while 中 多走了一步循环            arr[0] = start + 1;                 arr[1] = end - start - 1;        }    }}

 

    

转载于:https://www.cnblogs.com/skillking/p/9384233.html

你可能感兴趣的文章
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
查看>>
如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
查看>>
论代码审查的重要性
查看>>
「docker实战篇」python的docker爬虫技术-导学(一)
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
wdcp 安装
查看>>
C语言运算符优先级相关问题
查看>>
MP4视频播放器代码
查看>>
Nginx 匹配 iphone Android 微信
查看>>
ldap
查看>>
Yum软件仓库配置
查看>>
linux 压缩与解压总结
查看>>
mysql脚本1064 - You have an error in your SQL syntax; check the manual
查看>>
nessus 本地扫描(一)
查看>>
linux服务器磁盘陈列
查看>>
python----tcp/ip http
查看>>
我的友情链接
查看>>
第一本docker书学习笔记1-3章
查看>>