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

相关推荐
动感小麦兜2 分钟前
应用-常用工具部署命令
java·开发语言
日日行不惧千万里15 分钟前
IDEA 是用什么开发的?
java·ide·intellij-idea
立志成为大牛的小牛1 小时前
数据结构——五十一、散列表的基本概念(王道408)
开发语言·数据结构·学习·程序人生·算法·散列表
百***06011 小时前
五大消息模型介绍(RabbitMQ 详细注释版)
java·rabbitmq·java-rabbitmq
转转技术团队2 小时前
MyBatis-Plus踩坑血泪史:那些年我们踩过的坑!
java·面试·mybatis
sg_knight2 小时前
IntelliJ IDEA 实用插件:GitToolBox 使用指南
java·ide·git·intellij-idea·插件·gittoolbox
青云交2 小时前
Java 大视界 -- Java 大数据机器学习模型在电商用户画像构建与精准营销中的应用
java·大数据·机器学习·电商·协同过滤·用户画像·精准营销
z***67772 小时前
Spring EL 表达式的简单介绍和使用
java·后端·spring
机灵猫3 小时前
java锁:从 Mark Word 锁升级到 AQS
java·开发语言
扶尔魔ocy4 小时前
【QT opencv】手动去噪--网格化获取区域坐标
开发语言·qt·opencv