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:待定

相关推荐
rgeshfgreh17 小时前
Spring Bean管理机制深度解析
java·spring boot·spring
ling-4517 小时前
ssm-day07 springboot3、Mybatis-Plus、springboot实战
java·spring boot·后端
DYS_房东的猫17 小时前
《 C++ 零基础入门教程》第3章:结构体与类 —— 用面向对象组织代码
开发语言·c++
向量引擎17 小时前
复刻“疯狂的鸽子”?用Python调用Sora2与Gemini-3-Pro实现全自动热点视频流水线(附源码解析)
开发语言·人工智能·python·gpt·ai·ai编程·api调用
少许极端17 小时前
算法奇妙屋(二十三)-完全背包问题(动态规划)
java·算法·动态规划·完全背包
CoderCodingNo17 小时前
【GESP】C++五级练习(贪心思想考点) luogu-P1115 最大子段和
开发语言·c++·算法
a程序小傲17 小时前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
lly20240617 小时前
PHP 运算符
开发语言
txinyu的博客17 小时前
make_shraed & make_unique 替代了new ? 什么场景使用new
开发语言·c++·算法
不会c嘎嘎17 小时前
QT中的常用控件(五)
服务器·开发语言·qt