算法--最长回文子串

双脉冲测试中IGBT驱动电阻和驱动电容的研究   在LTspice中没有双脉冲波形发生器,要做一个双脉冲的波形只能用电压源来进行特殊设置,不是很方便,为此我写了一个双脉冲波形发生器,有需要的可以下载。双脉冲波形发生器。   如下,该元器件可以自定义延迟时间Td,第一个脉冲宽度T1,第二个脉冲宽度T3,两个脉冲间隔T2,脉冲循环个数Ncycle以及高低电平Vhigh,Vlow。       IGBT开通时Rg的影响: 如果增大Rg: ①开通延... 阅读详情

描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
回文串的定义:正着和反着读一样,那我们是不是把原来的字符串倒置了,然后找最长的公共子串就可以了。例如 S = “caba” ,S = “abac”,最长公共子串是 “aba”,所以原字符串的最长回文串就是 “aba”。

作者:windliang
链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-bao-gu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

示例

示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。

示例 2: 输入: “cbbd” 输出: “bb”

分析

方法1.暴力求解,列举所有的子串,判断是否为回文串,保存最长的回文串。
方法2.中心扩散法(参考)。
从每一个位置出发,向两边扩散即可。遇到不是回文的时候结束。举个例子,str = acdbbdaa我们需要寻找从第一个 b(位置为 33)出发最长回文串为多少。怎么寻找?
首先往左寻找与当期位置相同的字符,直到遇到不相等为止。
然后往右寻找与当期位置相同的字符,直到遇到不相等为止。
最后左右双向扩散,直到左和右不相等。如下图所示:
在这里插入图片描述
每个位置向两边扩散都会出现一个窗口大小(len)。如果 len>maxLen(用来表示最长回文串的长度)。则更新 maxLen 的值。
因为我们最后要返回的是具体子串,而不是长度,因此,还需要记录一下 maxLen 时的起始位置(maxStart),即此时还要 maxStart=len。

简单实现

1.暴力破解

    public boolean isPalindromic(String s) {
		int len = s.length();
		for (int i = 0; i < len / 2; i++) {
			if (s.charAt(i) != s.charAt(len - i - 1)) {
				return false;
			}
		}
		return true;
	}

// 暴力解法
    public String longestPalindrome(String s) {
        String ans = "";
        int max = 0;
        int len = s.length();
        for (int i = 0; i < len; i++)
         for (int j = i + 1; j <= len; j++) {
             String test = s.substring(i, j);
              if (isPalindromic(test) && test.length() > max) {
                ans = s.substring(i, j);
                max = Math.max(max, ans.length());
            }
        }
        return ans;
    }

2.中心扩散法

public String longestPalindrome1(String s) {

        if (s == null || s.length() == 0) {
            return "";
        }
        int strLen = s.length();
        int left = 0;
        int right = 0;
        int len = 1;
        int maxStart = 0;
        int maxLen = 0;

        for (int i = 0; i < strLen; i++) {
            left = i - 1;
            right = i + 1;
            while (left >= 0 && s.charAt(left) == s.charAt(i)) {
                len++;
                left--;
            }
            while (right < strLen && s.charAt(right) == s.charAt(i)) {
                len++;
                right++;
            }
            while (left >= 0 && right < strLen && s.charAt(right) == s.charAt(left)) {
                len = len + 2;
                left--;
                right++;
            }
            if (len > maxLen) {
                maxLen = len;
                maxStart = left;
            }
            len = 1;
        }
        return s.substring(maxStart + 1, maxStart + maxLen + 1);

    }

【AI智能体】Coze 搭建个人旅游规划助手实战详解 Coze 制作旅游规划助手机器人实战详解 阅读详情

相关推荐

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

【LeetCode每日一题】5. 最长回文子串

题目 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 示例 2 输入:s = "cbbd" 输出:"bb" 示例 3 输入:s = "a" 输出:"a" 示例 4 输入:s = "ac" 输出:"a" 提示 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成 题解 ????解析:不知道看到这道题大家的第一思路是什么,但我首先想到的就是:

flameking的博客 763

Linux 命令之 locale -- 设置和显示程序运行的语言环境

文章目录命令介绍locale 设置规则使用详解(一)查看当前 locale 设置(二)查看当前系统所有可用 locale(三)设置系统的 locale 命令介绍 locale 是 Linux 系统中多语言环境的设置接口,在 Linux 中,使用 locale 命令来设置和显示程序运行的语言环境,locale 会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。 通过 locale 来设置程序运行的不同语言环境,locale 由ANSI C提供支持。locale 的

liaowenxiong的博客 3万+

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000

1、问题描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb 2、预备知识介绍 回文字符串:一个字符串的反序和正序的顺序一致,就说是回文字符串。 3、问题分析 我们使用一个具体的例子来进行分析 ...

qq_24231063的博客 4105

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

本教程介绍如何使用魔搭社区GPU资源和LLaMA-Factory工具进行大模型微调。主要内容包括环境配置、工具安装、模型训练和效果评估。通过LoRA算法进行自我认知微调,详细说明了从数据准备到模型导出的完整流程,并提供了参数调优和显存管理等实用技巧,帮助读者快速掌握大模型定制化训练方法。

LChuck的博客 2924

【NTN 卫星通信】Starlink 星链卫星有多大?详解尺寸与技术参数

SpaceX的星链项目正在重塑全球互联网连接,尤其是在服务不足的地区。但星链卫星的实际尺寸有多大?

weixin_43603524的博客 1万+

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

Springboot模板一级目录二级目录三级目录 一级目录 二级目录 三级目录

qq_45547474的博客 2891

从零开始!在 Windows 上安装与配置 Dify

这篇博客将详细介绍如何在 Windows 系统上部署 Dify,适合零基础用户。从 Docker 和 WSL 的安装配置开始,逐步指导用户设置 Git、Docker 环境以及 Dify 配置文件,解决可能遇到的端口冲突等问题,最终完成 Dify 的启动和测试。通过简明易懂的步骤,帮助用户在本地成功运行 Dify,实现模型供应商配置,让 Dify 项目在 Windows 平台上顺利上线。

qq_49035156的博客 5万+

【Leetcode】最长回文子串

leetcode刷题笔记

weixin_38060958的博客 890

pyradiomics使用——1. 医学影像的组学特征值(Radiomics Features)提取

文章目录1. 使用插件1.1 插件安装1.2 插件使用2. 使用python代码2.1 安装2.2 使用2.2.1 官方示例2.2.2 快速使用2.2.3 其它使用3. 组学特征字段意义说明 Github地址:https://github.com/AIM-Harvard/pyradiomics 官方文档地址:https://pyradiomics.readthedocs.io/en/latest/features.html 1. 使用插件 从pyradiomics的Github仓库中可以知道,pyradio

啷个哩个啷 7367

PyQt5自动化测试,让测试更加便利

PyQt5是一个Python的GUI编程工具包,帮助开发者可以更加简单、快捷地创建图形界面和处理用户输入。在PyQt5中有两种常见的测试方式:手动测试和自动化测试。手动测试需要通过点击、输入等交互操作进行测试,自动化测试则是通过程序模拟鼠标、键盘等操作进行测试。这段代码创建了一个简单的窗口,其中包含一个按钮。这段代码打开一个本地HTML文件,点击页面上的按钮并检查输出是否为“Button clicked”。以上就是在PyQt5中进行自动化测试的简单示例。使用PyQt5可以大大简化测试过程,提高测试效率。

PixelCoder的博客 710

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

示例一: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例二: 输入:s = "cbbd" 输出:"bb" 这道题我给出了2个思路,四种解法,一种思路是暴力解法,一种用到了动态规划 1、第一种思路 暴力解法 解法一: 当输入的字符串长度为0或者为1的时候,则它的最大回文字串就是它本身;如果大于这个长度,我是这样思考的: 用两个指针分别从第一个字母和最后一个字母进行遍历,当首指针与与尾指针相同的时候,可能他们之间是最长的回文字串,这时将首指针向后移动,尾指针向前

tqq的博客 5430

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最长回文子串——马拉车算法详解

马拉车算法(Manacher‘s Algorithm)是用来解决求取一个字符串的最长回文子串问题的。此算法充分利用了回文字符串的性质,将算法复杂度降到了线性,非常值得一学。 我将网上所有讲解马拉车算法的文章基本看了一遍,总结出了最通俗易懂的介绍,同时用 python 进行了实现。 题目 给定一个字符串s,找到s中最长的回文子字符串。 所谓回文字符串,指的是无论从左往右读还是从右往左读,...

HappyRocking的专栏 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最长回文子串java_求最长回文子串算法——马拉车算法

Manacher's Algorithm,中文名叫马拉车算法,是一位名叫Manacher的人在1975年提出的一种算法,解决的问题是求最长回文子串,神奇之处在于将算法的时间复杂度精进到了O(N),下面我们来详细介绍下这个算法的思路。01 算法由来在求解最长回文子串的问题时,一般的思路是以当前字符为中心,向其左右两边扩展寻找回文,但是这种解法的时间复杂度是O(N^2),那么能不能将时间复杂度再降低一...

weixin_36216477的博客 444

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

动态规划算法求最长回文子串

给出了动态规划方法求最长回文子串的程序及分析。

Talk is cheap,show me your code 1万+

算法:最长回文子串。

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

孤芳不自赏 1332

算法——【最长回文子串】

学习算法之前,我们先理清楚几个基础概念:回文串:正读和反读一样的串回文子串:原文的某个回文串最长回文子串:原串中最长的回文子串接下来,我们看看问题是什么:给你一个字符串 s,找到 s 中最长的 回文 子串。接下来我一共会讲解三种算法。

2402_83493359的博客 1134

最长回文子串算法

#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述    小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。    这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符

二十三小时 936

算法-最长回文子串

算法-最长回文字符串问题概述1. 问题分析1.1 算法核心1.2 算法分析2. 解决方案3. 资源分享 问题概述 题目:算法-最长回文字符串- 问题描述: 输入一个字符串,求出其中最长的回文子串。子串的含义是: 在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同。 如abba和yyxyy。在判断回文时,应该忽略所有标点符号和空格,且忽略大小写,但输出应保持原样(在回文串的首部和尾部不要输出多余字符)。 输入字符串长度不超过5000,且占据单独的一行。 应该输出最长的回文串,如果有多个,输出起

旗木白哉のblog 251

面试算法题精讲:最长回文子串

面试算法题精讲:最长回文子串

ProgramNovice的博客 1493

Manacher 算法——Leetcode 5.最长回文子串

Manacher算法

SpaceTravellers的博客 1038

马拉车算法(Manache)求最长回文子串

这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的。对于回文串想必大家都不陌生,就是正读反读都一样的字符串,比如 “bob”, “level”, “noon” 等等,那么如何在一个字符串中找出最长回文子串呢,可以以每一个字符为中心,向两...

FreeGo~ 1249

NOJ1100最长回文子串——经典算法

最长回文子串 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:492            测试通过:174 描述 输入一个字符串,求出其中最大的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输

我的博客 852

寻找最长回文子串——manacher算法

深度讲解manacher算法的实现过程

xiximo 727

最长回文子串 Manacher算法

2018-03-24 14:51:01 在计算机科学中,最长回文子串或最长对称因子问题是在一个字符串中查找一个最长连续子串,这个子串必须是回文。例如“banana”最长回文子串是“anana”。最长回文子串并不能保证是唯一的,例如,在字符串“abracadabra”,没有超过三的回文子串,但是有两个回文字串长度都是三,是“ada”和“aca”。在一些应用中需要返回全部的最长回文子串(所...

aitie1479的博客 119

最长回文子串Manacher算法

回文串是这样的abba,ababa,就是把这个串翻转过来和原串是一样的, 最长回文子串,就是在一个长串中找到一个 子串,这个子串是 长串中的最长回文子串 简单的做法是 指定前后两个指针,判断这两个指针之间的字符串是否是回文串,并记录最大值 有一个算法是来计算最长回文子串的叫做Manacher,在网上找了半天有点没看懂,最后自己在纸上模拟一下才弄懂,说一下自己的思路 首先将字符串S用‘

曾经最动心的专栏 550
上一篇: 算法--无重复字符的最长子串
下一篇: Spring Boot 整合微信小程序并实现简单CRUD
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值