Java数据结构与算法(最长回文子串中心扩散法)

前言

回文子串是练习数据结构和算法比较好的使用场景,可以同时练习到双指针、动态规划等一些列算法。

实现原理

中心扩散算法实现。这里定义最长回文子串长度的大小为maxLen,起点位置为0.

奇数个数为中心点和偶数个数为中心点分别计算回文长度大小。注意while退出条件为不匹配回文子串,计算长度时需回退right和left。此时长度计算公式为(right-1)-(left+1)+1

得到最长回文长度大小后再计算起点位置。i-(maxLen-1)/2

具体代码实现

java 复制代码
class Solution {
    public String longestPalindrome(String s) {

        int maxLen=1;
        int begin=0;
        char[] charArray=s.toCharArray();
        for(int i=0;i<charArray.length-1;i++){
            int oneNum=validCicle(charArray,i,i);
            int twoNum=validCicle(charArray,i,i+1);
            int max=Math.max(oneNum,twoNum);
            if(maxLen<max){
                maxLen=max;
                begin=i-(maxLen-1)/2;
            }
        }
        return s.substring(begin,begin+maxLen);
    }



    public int validCicle(char[] charArray,int left,int right){
        while(left>=0&&right<charArray.length){
            if(charArray[left]==charArray[right]){
                left--;
                right++;
            }else{
                break;
            }
        }
        return (right-1)-(left+1)+1;
    }
}

QA:待定

相关推荐
菜鸟plus+14 小时前
Semaphore
java
阿登林15 小时前
C# iText7与iTextSharp导出PDF对比
开发语言·pdf·c#
小梁努力敲代码15 小时前
java数据结构--LinkedList与链表
java·数据结构·链表
それども15 小时前
IDEA Gradle并行编译内存溢出问题
java·ide·gradle·intellij-idea
qq_4335545415 小时前
C++ 双向循环链表
开发语言·c++·链表
滑水滑成滑头15 小时前
**发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
java·网络·python·安全·web安全
一只侯子15 小时前
Tuning——CC调试(适用高通)
开发语言·图像处理·笔记·学习·算法
丁浩66615 小时前
Python机器学习---1.数据类型和算法:线性回归
开发语言·python·机器学习·线性回归
野犬寒鸦15 小时前
从零起步学习MySQL || 第七章:初识索引底层运用及性能优化(结合底层数据结构讲解)
java·数据库·后端·mysql·oracle
那年窗外下的雪.15 小时前
鸿蒙ArkUI布局与样式进阶(十二)——自定义TabBar + class类机制全解析(含手机商城底部导航案例)
开发语言·前端·javascript·华为·智能手机·harmonyos·arkui