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

相关推荐
星夜离尘561 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
_Evan_Yao1 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
Ai-_Man2 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd2 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼2 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
学逆向的2 小时前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_2 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
thefool1122662 小时前
TCP 1
java·1024程序员节
金銀銅鐵5 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手5 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务