当前位置: 首页 > news >正文

【LeetCode】5. Longest Palindromic Substring 最大回文子串

题目:

  Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

思路:用Manacher算法得到最大回文子串的长度,得到带#的最大回文子串,用split剔除#后转化成String形式输出即可。

public class Solution {
    public String longestPalindrome(String s) {
        if(s==null || s.length()==0){
            return null;
        }
        char[] charArr=manacherString(s);
        int[] pArr=new int[charArr.length];
        
        int index=-1;
        int center=-1;
        int pR=-1;
        int max=0;
        for(int i=0;i<charArr.length;i++){
            pArr[i]=pR>i?Math.min(pArr[2*index-i],pR-i):1;
            
            while(i+pArr[i]<charArr.length && i-pArr[i]>-1){
                if(charArr[i+pArr[i]]==charArr[i-pArr[i]]){
                    pArr[i]++;
                }else{
                    break;
                }
            }
            if(i+pArr[i]>pR){
                pR=i+pArr[i];
                index=i;
            }
            
            if(pArr[i]-1>max){
                max=pArr[i]-1;//得到最大回文子串的长度
                center=i;
            }
        }
        //以string形式返回最大回文子串
         String str=new String(charArr);
         String[] strArr=str.substring(center-max,center+max).split("#");
         StringBuffer sb=new StringBuffer();
         for(int i=0;i<strArr.length;i++){
             sb.append(strArr[i]);
         }
        return sb.toString();
    }
    
    public static char[] manacherString(String str){
        char[] charArr=str.toCharArray();
        char[] res=new char[2*str.length()+1];
        int index=0;
        for(int i=0;i!=res.length;i++){
            res[i]=(i&1)==0?'#':charArr[index++];
        }
        return res;
    }
}

  

转载于:https://www.cnblogs.com/zhstudy/p/5994177.html

相关文章:

  • vu2响应式原理 代码分析
  • 希尔排序
  • vu3响应式原理 代码分析
  • Java Tomcat SSL 服务端/客户端双向认证(一)
  • vue3中 setup注意点
  • redis简介
  • 《Spark GraphX in Action》书评及作者访谈
  • vue3的 computed 计算属性 与 watch监听
  • Diomidis Spinellis:有效的调试
  • ListView的简单使用
  • vue3技术 watch时 value问题
  • 最大流学习笔记(1)
  • vue3 watchEffect 函数
  • Apaceh 多虚拟主机多站点配置两种方案
  • ubutnu安装geany
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • ES6 ...操作符
  • Java 23种设计模式 之单例模式 7种实现方式
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Kibana配置logstash,报表一体化
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python中eval与exec的使用及区别
  • quasar-framework cnodejs社区
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 力扣(LeetCode)56
  • 前端
  • 如何学习JavaEE,项目又该如何做?
  • 设计模式 开闭原则
  • 数据科学 第 3 章 11 字符串处理
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微服务框架lagom
  • 微信小程序设置上一页数据
  • 原生js练习题---第五课
  • 责任链模式的两种实现
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • UI设计初学者应该如何入门?
  • ​决定德拉瓦州地区版图的关键历史事件
  • (C语言)二分查找 超详细
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)WLAN定义和基本架构转
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • ... 是什么 ?... 有什么用处?
  • .htaccess配置常用技巧
  • .NET 8.0 发布到 IIS
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net和php怎么连接,php和apache之间如何连接
  • @Autowired 与@Resource的区别
  • @Bean注解详解