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

leetcode-5-最长回文串

题目描述

给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:

输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成

解题思路

要找到最长的回文子串,可以使用动态规划或中心扩展两种方法来解决。下面我将分别介绍这两种方法的思想,并提供使用Scala编写的示例代码。

动态规划方法:

动态规划的思想是利用已知的子问题的解来求解更大规模的问题的解。在这个问题中,我们可以使用一个二维数组 dp,其中 dp(i)(j) 表示从索引 i 到索引 j 的子串是否为回文串。状态转移方程如下:

dp(i)(j) = dp(i+1)(j-1) && s(i) == s(j)

在更新 dp 数组的过程中,需要注意边界条件和更新顺序。

中心扩展方法:

中心扩展的思想是以每个字符或两个字符之间的空隙作为回文串的中心,然后向两边扩展来判断是否为回文串。具体步骤如下:

  • 从左到右遍历每个字符,以当前字符为中心向两边扩展,找到以当前字符为中心的最长回文子串。
  • 从左到右遍历每两个相邻字符之间的空隙,以空隙为中心向两边扩展,找到以空隙为中心的最长回文子串。

使用以上两种方法中的任何一种都可以解决这个问题。下面是使用Scala编写的示例代码,演示了动态规划方法的实现:

object Solution {def longestPalindrome(s: String): String = {val n = s.lengthvar start = 0var maxLength = 1val dp = Array.ofDim[Boolean](n, n)for (i <- 0 until n)dp(i)(i) = truefor (length <- 2 to n) {for (i <- 0 until n - length + 1) {val j = i + length - 1if (s(i) == s(j)) {if (length == 2 || dp(i + 1)(j - 1)) {dp(i)(j) = trueif (length > maxLength) {maxLength = lengthstart = i}}}}}s.substring(start, start + maxLength)}def main(args: Array[String]): Unit = {val s1 = "babad"val s2 = "cbbd"println(longestPalindrome(s1))  // Output: "bab"println(longestPalindrome(s2))  // Output: "bb"}
}
http://www.lryc.cn/news/134508.html

相关文章:

  • 二、Oracle 数据库安装集
  • 【Python】Python中的常用函数及用法
  • 基于JavaEE的ssm公司员工信息管理系统的设计与实现
  • cornerstoneJS加载图片(base、矩阵)
  • 3.Trunc截断函数用法
  • 腾讯云 CODING 荣获 TiD 质量竞争力大会 2023 软件研发优秀案例
  • VSCode如何为远程安装预设(固定)扩展
  • 一文解析HTTP与HTTPS,它们的区别和联系
  • Faster RCNN网络数据流总结
  • 拒绝摆烂!C语言练习打卡第五天
  • 关于LambdaQueryWrapper.or()导致错误
  • Day17-Node后端身份认证-JWT
  • onvif中imaging setting图像画质总结!
  • not in效率低(MYSQL的Not IN、not EXISTS如何优化)
  • 微信小程序拉起支付报: 调用支付JSAPI缺少参数: total_fee
  • Thinkphp6 如何 生成二维码
  • 01.机器学习引言
  • 结构型(二) - 桥接模式
  • 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测
  • C#与西门子PLC1500的ModbusTcp服务器通信1--项目背景
  • Socks5代理与IP代理:网络安全与爬虫之道
  • 苹果电脑怎么录屏?步骤详解,看到就是赚到
  • vb毕业生管理系统设计与实现
  • WPF入门到精通:4.页面增删改查及调用接口(待完善)
  • 容器和云原生(三):kubernetes搭建与使用
  • spring boot集成jasypt 并 实现自定义加解密
  • Qt文件系统操作和文件的读写
  • MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models
  • 学习开发振弦采集模块的注意事项
  • 抵御时代风险:高级安全策略与实践