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

【马拉车算法/动态规划】最长回文字串

最长回文字串

  • 1.问题描述
  • 2.中心扩展法(O(N^2))
  • 3.动态规划
  • 4.Manacher(马拉车算法)

1.问题描述

问题描述
常用有3种算法:中心扩展法、动态规划和Manacher算法

2.中心扩展法(O(N^2))

解释:
从中心向外扩展。
分为两种情况:第一种当回文串长度为奇数的情况;第二种当回文串长度为偶数的情况。
左右同时向外扩展,当左右不相同时停止扩展,记录最长回文串长度及起始位置。

    public String longestPalindrome(String str) {if (Objects.isNull(str) || str.isEmpty()) {return "";}int maxStart = 0;int maxLength = 1;for (int i = 0; i < str.length(); i++) {for (int k = 0; k < 2; ++k) {int leftIndex = i - k; // k = 0表示偶数长度,k = 1表示奇数长度int rightIndex = i + 1;while (leftIndex >= 0&& rightIndex < str.length()&& str.charAt(leftIndex) == str.charAt(rightIndex)) {leftIndex--;rightIndex++;}if (maxLength < rightIndex - leftIndex - 1) { // 当前length = (rightIndex - 1) - (leftIndex + 1) + 1maxLength = rightIndex - leftIndex - 1;maxStart = leftIndex + 1;}}}return str.substring(maxStart, maxStart + maxLength);}     

3.动态规划

4.Manacher(马拉车算法)

http://www.lryc.cn/news/142500.html

相关文章:

  • 什么是 fail-fast? 什么是fail-safe?
  • 第三届计算机、物联网与控制工程国际学术会议(CITCE 2023)
  • react antd 日期选择 WeekPicker MonthPicker 取值转为起止日期
  • table,设置 数据相同时, 合并列
  • kotlin如何接收前端传递过来的数据
  • 《中国区块链发展报告(2023)》发布 和数集团推动区块链发展
  • FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置
  • Android SDK 上手指南||第五章 用户界面设计
  • std::list和std::vector删除指定下标的元素
  • Apache POI 以及 导出Excel表
  • RabbitMQ从原理到实战—基于Golang【万字详解】
  • 机器学习——KNN算法
  • Kali 软件管理测试案例
  • 【分布式】Zookeeper
  • ScheduleJS Crack,新的“信息列”水平滚动功能
  • curl封装
  • C语言数据类型和变量
  • 分布式训练 最小化部署docker swarm + docker-compose落地方案
  • QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动
  • QT使用QXlsx实现数据验证与Excel公式操作 QT基础入门【Excel的操作】
  • renrenfast Vue2 打包发布
  • NoSQL数据库介绍+Redis部署
  • 【mindspore学习】环境配置
  • 基于shell脚本对aliyun npm仓库(https://packages.aliyun.com)登录认证
  • K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA
  • 提高企业会计效率,选择Manager for Mac(企业会计软件)
  • 软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP
  • Vue3中reactive响应式失效的问题
  • lamp
  • LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗