leetcode hot100【LeetCode 5.最长回文子串】java实现

embedded/2024/11/17 21:16:03/

LeetCode 5.最长回文子串

题目描述

给定一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入: s = "babad"
输出: "bab"
解释: "aba" 也是一个有效答案。

示例 2:

输入: s = "cbbd"
输出: "bb"

说明:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

Java 实现代码

java">public class Solution {public String longestPalindrome(String s) {if (s == null || s.length() < 1) {return "";}int start = 0, end = 0;  // 最长回文子串的起始和结束位置for (int i = 0; i < s.length(); i++) {int len1 = expandAroundCenter(s, i, i);    // 以单个字符为中心int len2 = expandAroundCenter(s, i, i + 1); // 以两个字符为中心int len = Math.max(len1, len2);if (len > (end - start)) {start = i - (len - 1) / 2;end = i + len / 2;}}return s.substring(start, end + 1);}// 中心扩展法private int expandAroundCenter(String s, int left, int right) {while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}return right - left - 1;  // 返回回文串的长度}
}

解题思路

该问题的核心是寻找字符串中最长的回文子串。回文子串的特点是从前向后和从后向前的字符相同。我们可以用几种方法来求解此问题,最常见的解法是通过
中心扩展法 来解决。

中心扩展法
  1. 回文的特点: 一个回文串可以通过其中心向两边扩展。例如,回文串 "aba" 的中心是 "b",从中间扩展出去,得到回文串。

  2. 中心扩展法的核心思想:

    • 每个字符(或每两个字符之间)可以看作回文的中心。
    • 从该中心开始,尝试向左右两侧扩展,找到最大长度的回文子串。
  3. 具体步骤:

    • 对于每个字符 i,考虑两种情况:
      • 以字符 i 为中心的奇数长度回文串。
      • 以字符 ii+1 为中心的偶数长度回文串。
    • 使用一个函数 expandAroundCenter(left, right) 来扩展回文串。
    • 对每个字符中心调用扩展函数,记录最大长度的回文子串。

复杂度分析

  • 时间复杂度O(n^2),其中 n 是字符串的长度。每次扩展时的时间复杂度为 O(n),总共需要执行 n 次扩展。
  • 空间复杂度O(1),只使用了常数空间来存储一些变量,不依赖于输入数据的大小。

http://www.ppmy.cn/embedded/138345.html

相关文章

Ollama—87.4k star 的开源大模型服务框架!!

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型&#xff08;LLM&#xff09;服务工具…

什么是Web 3.0?

web 3.0是非常火的一个概念了&#xff0c;就算你不知道他具体是什么&#xff0c;但是你也一定听说过这个名词。 但是Web 3.0中又夹杂着很多其他的概念&#xff0c;比如币、DeFi、DeApps、NFT、元宇宙&#xff0c;等等更多其他的概念&#xff0c;所以很多人就更难理解了。这篇文…

【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)

& 第四届信号处理与通信技术国际学术会议&#xff08;SPCT 2024&#xff09; 2024 4th International Conference on Signal Processing and Communication Technology 2024年12月27-29日 中国深圳 www.icspct.com 第四届信号处理与通信技术国际学术会议&#x…

sql数据库-排序查询-DQL

目录 语法 排序方式 举例 将表按年龄从小到大排序 将表按年龄从大到小排序 ​编辑 多重排序 将表按年龄升序&#xff0c;年龄相同按入职时间降序 语法 select * from 表名 order by 字段名1 排序方式1&#xff0c;字段2 排序方式2; 排序方式 升序&#xff1a;ASC&…

<项目代码>YOLOv8 草莓成熟识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

力扣 —— 2341.数组能形成多少数对

力扣 —— 2341.数组能形成多少数对 题目链接&#xff1a;数组能形成多少数对 刷一道题热热身。 题目 要求 题目分析 简单的对题目进行分析&#xff0c;可以看出题目的意思是给你一个数组&#xff0c;让你找出这个数组中一共有多少对相同的数字&#xff0c;然后除去这相同的数…

IDC机房服务器托管的费用组成

IDC机房服务器托管的费用&#xff0c;并不是只有我们所想的电费而已&#xff0c;还有一些其它费用组成&#xff0c;详细来看&#xff1a; 1. 机位费用&#xff1a;   - 机位费用是根据服务器的尺寸和占用的空间来计算的。服务器通常按照U&#xff08;Unit&#xff09;的高度来…

MFC IDC_STATIC控件嵌入一个DIALOG界面

1.创建一个新的mfc工程 2.在资源视图中新增一个dialog界面 将新增的dialog界面属性中的Border置为None,Style置为Child 右键新增的dialog界面添加类&#xff0c;用于增加类文件 3.在原Dlg文件中增加新dialog文件相关内容 h文件 #include "MyDialog.h" public:…