LeetCode热题100 刷题笔记(第五天)多维动态规划(中心扩展法) 「 最长回文子串」

前言

这几天不是在写文章总结黑马点评吗,感觉敲代码的能力确实有点欠缺了,主要是敲项目代码的时候,接入了AI,大部分代码都是直接按Tab键自动生成的,代码能力确实有一点退步了🤪🤪🤪,这几天学学数据结构,刷刷题🏄🏄🏄,冲冲冲一天一道,(但是我感觉可能坚持不下去🤪)

题目

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

示例 1:

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"

输出:"bb"

提示:

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

核心思路:一句话解释

回文串一定有一个 "中心"。

  • 奇数长度(如 "aba"):中心是一个字符。
  • 偶数长度(如 "abba"):中心是两个字符的缝隙。
    我们要遍历每个字符,把它当成中心,向两边无限扩散,直到左右字符不相等为止,记录最长的那个。
java 复制代码
class Solution {
  public String longstPalindrome(String s){
    //边界处理: 空串或单字符串直接返回
    if (s == null || s.length() < 2) {
      return s;
    }
    int start = 0; //记录最长回文的起始下标
    int end = 0; //记录最长回文的结束下标
    //遍历每个字符, 作为回文中心
    for (int i = 0; i < s.length(), i++) {
      //情况1 : 以 i为中心 (奇数长度回文)
      int len1 = expandAroundCenter(s, i, i);
      //情况2: 以 i 和 i+1 之间为中心 (偶数长度回文)
      int len2 = expandAroundCenter(s, i, i+1);
      //取当前能扩出的最大长度
      int maxLen = Math.max(len1, len2);
      //如果当前长度比之前记录的长, 更新start和end
      if (maxLen > end - start) {
         start = i - (maxLen - 1) / 2;
         end = i + maxLen / 2; 
      }
    }
    // substring 是左闭右开, 所以 end + 1
    return s.substring(start, end + 1);
  }
  /**
     * 辅助方法:从 left 和 right 位置向两边扩散,返回回文长度
     * @param s 字符串
     * @param left 左指针
     * @param right 右指针
     * @return 回文串长度
     */
   private int expandAroundCenter(String s, int left, int right) {
     //只要左右不越界, 且字符相等, 就继续扩散
     while(left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)){
       left--;
       right++;
     }
     // 退出循环时,左右已经不相等了,真实长度是 (right-1) - (left+1) + 1 = right - left - 1
     return right - left - 1;
   }
}

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

...。。。。。。。。。。。...

...。。。。。。。。。。。...

相关推荐
Zhao-Jichao30 分钟前
AI Prompting for Everyone 课程笔记 - P19 数据分析 Data Analysis
人工智能·笔记·数据分析
旖旎夜光1 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
ACP广源盛139246256731 小时前
选型笔记:Type‑C 扩展坞方案评估|DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP
笔记·硬件架构·硬件工程·视频·国产芯片
李长渊哦3 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
pixelpilot3 小时前
Deta Surf:把笔记、文件和网页塞进同一个 AI 工作台
笔记·其他
蒸蒸yyyyzwd4 小时前
学习笔记 复盘
笔记·八股
旖旎夜光4 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
一支蜉蝣7 小时前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
東隅已逝,桑榆非晚7 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
欢欢李7 小时前
【LTE L3 笔记 01】LTE空口特点
笔记·无线通信·物理层·lte·空口协议