回文串、动态规划、中心扩散、Manacher 算法

浅谈回文串问题 回文串问题是字符串类型的题目中常见的一类。在绝大多数情况下,但凡涉及字符串问题都对“暴力算法”以及dfs等形式不太友好,常见的解决思路有动态规划,而除此之外,利用自动匹配机的性质,大牛们又发明了巧妙而高效的算法。本文在涉及“回文串类型问题”的解法之上,主要罗列一些常见的解决思路。 最粗暴的解法:暴力法O(N^3) 首先,可能大多数人都会想到利用回文串的性质,即S = reverse(S)... 阅读详情

https://leetcode-cn.com/problems/longest-palindromic-substring/

方法一:中心扩散法

class Solution {
    public String longestPalindrome(String s) {
         if(s.length()<2) return s;
        char[] c = s.toCharArray();
        int count;
        int point;
        int maxcount=0;
        int maxpoint=0;
        int size=0;
        int L=c.length;
        boolean flagissig=true;

        for (int i = 0; i < L; i++) {
            point = i;
            size = Math.min(i, L - i - 1);
            count = 0;

            for (int j = 0; j <= size; j++) {
                if (c[i - j] == c[i + j]) {
                    count++;
                    continue;
                } else {
                    break;
                }
            }

            if (count > maxcount) {
                maxcount = count;
                maxpoint = point;
            }
        }


//回文串是偶数的情况再来一次
        for (int i = 0; i < L; i++) {
            point = i;
            size = Math.min(i, L - i - 2);
            count = 0;
            for (int j = 0; j <= size; j++) {
                if (c[i - j] == c[i + j +1]) {
                    count++;
                    continue;
                } else {
                    break;
                }
            }

            if (count >= maxcount) {
                flagissig=false;
                maxcount = count;
                maxpoint = point;
            }
        }

        if(flagissig)
        return s.substring(maxpoint - maxcount + 1, maxpoint + maxcount);
        else
            return s.substring(maxpoint - maxcount + 1, maxpoint + maxcount+1);
    }
}

 

方法二:移动窗口法

public class jarvis {

    public static void main(String[] args) {
        System.out.println(longestPalindrome("sojrsalskjdef"));
    }

    public static String longestPalindrome(String s) {
        String result = null;
        char[] chars = s.toCharArray();
        for (int i = chars.length; i >= 1; i--) {
            //获取所有这个长度的char数组
            for (int a = 0; a <= chars.length - i; a++) {
                //判断是否是回文
                boolean flag = false;
                for (int j = 0; j < i / 2; j++) {
                    if (chars[a + j] == chars[a + i - 1 - j]) {

                    } else {
                        flag = true;  //不是回文
                    }
                }
                if (flag == false) {
                    result = s.substring(a, a + i);
                    return result;
                }
            }
        }
        return null;
    }
}

 

 

 

 

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码) 本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。 阅读详情

相关推荐

别再到处找离线包了!Visual Studio 2022 企业版/社区版离线安装保姆级教程(含工作负载选择指南)

本文提供Visual Studio 2022企业版/社区版离线安装的详细教程,包括工作负载选择指南和批量安装优化策略。针对网络隔离或带宽受限环境,介绍如何制作离线安装包、选择合适的工作负载组合,并分享高级技巧如增量更新和自动化部署,帮助团队高效统一开发环境配置。

weixin_28745821的博客 732

LeetcodeMedium-【5. 最长回文子串】三种解法:中心扩散、动态规划、Manacher's Algorithm(马拉车算法)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-...

ystraw - Come on!!! 266

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 498

【算法题——字符串&数组专栏】回文串系列

回文串系列编程算法题,实时更新。

夏栀的博客 778

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5862

Ribo测序翻译效率计算及可视化

本文介绍了一个计算翻译效率(TE)和分析转录-翻译相关性的生物信息学流程。首先通过Python脚本从标准化表达量矩阵(TPM/FPKM)计算TE值,该脚本自动匹配转录组(RNA)和翻译组(Ribo)样本进行比值运算。然后使用R语言进行相关性分析,通过ggplot2绘制样本间转录-翻译表达量的散点图,添加线性回归线和相关系数标注,支持PNG/PDF格式输出。整个流程实现了从原始数据处理到可视化分析的全过程。

Tiaoxiaobai的博客 554

Manacher(马拉车)算法详解

算法的主要思路是维护一个最右回文子串,利用该区间的对称性,计算当前遍历位置为中心的回文半径,回文半径就是从中心(如果为奇回文串,就包含中心位置)到回文串一端的距离。我们可以再每个字符之间加入特殊字符,奇回文串的中心不变,偶回文串的中心就变成了特殊字符。还有另一种枚举的方法,是中心扩散法,利用了回文串的对称性,枚举每一个字符,然后从中心向两边比较,时间复杂度也为。求最长回文子串的方法,最容易想到的就是暴力枚举,将所有的回文子串都找出来,然后找做大的,时间复杂度就相当高了。,回文串可以分为奇回文串和偶回文串,

c661280411470yb的博客 1967

2022-04-06 RK3566 上调试百兆以太网卡YT8512C 调试记录

一、原理图 二、dts &gmac1_clkin{ clock-frequency = <50000000>; status = "okay"; }; &gmac1 { phy-mode = "rmii"; clock_in_out = "input"; snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; sn...

海月汐辰 1万+

回文串详解

回文串算法详解(三种计算方式)

sliglil的博客 2452

论文阅读:Query-Dependent Video Representation for Moment Retrieval and Highlight Detection

近年来,随着视频理解需求的急剧增加,视频时刻检索和高亮检测(MR/HD)成为人们关注的焦点。MR/HD的主要目标是对给定的文本进行视频时刻定位和内容一致性估计,即显著性得分。尽管最近基于transformer的模型带来了一些进步,但我们发现这些方法并不能完全利用给定查询的信息。例如,在预测时刻及其显著性时,有时会忽略文本查询与视频内容之间的相关性。为了解决这个问题,我们引入了基于查询的DETR (QD-DETR),这是一种为MR/HD量身定制的检测transfomer。

qq_42681787的博客 919

使用Gitlab 搭建私有镜像仓库(外置Nginx)

为了让团队尽快使用Gitlab的CI进行工作,必须做好Gitlab的初始化工作,大家都知道拉取镜像由于某些原因,会比较慢,因此构建自己的私有镜像仓库就成为了关键的一步。当然私有镜像仓库的搭建有很多种方式,这里直接使用Gitlab提供的镜像仓库功能。一揽子解决方案比较香。gitlab真的越来越好用了,有了这个镜像仓,也没必要再使用三方的镜像仓库了。Devops 真好用!

网尘的技术专栏 1829

最长回文子串求解

转载自LeetCode,作者liweiwei1419 回文串可分为奇数回文串和偶数回文串。它们的区别是:奇数回文串关于它的“中点”满足“中心对称”,偶数回文串关于它“中间的两个点”满足“中心对称”。 方法一:暴力匹配 (Brute Force) 不推荐 方法二:中心扩散法 中心扩散法的想法很简单:遍历每一个索引,以这个索引为中心,利用“回文串”中心对称的特点,往两边扩散,看最多能扩散多远...

fallWyl的博客 541

假期搞定!2026国社科申报AI全攻略指南:从选题到创新,7大核心要点手把手教你!

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。你的任务是:用高度凝练的方式说明在(某一明确国家战略 / 政策方向,如:中国式现代化、共同富裕、基层治理现代化、数字中国、文化强国、国家安全等)背景下,我究竟要研究一个什么“具体而可操作的问题”。

智能AI让学术科研更容易 624

随笔-最长回文子串(Longest Palindromic Substring)——三种时间复杂度的解法

题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 方法一:暴力解法; 采用滑动窗口,先对最长的字符子串进行判断,下来对长度减一的几条子串进行判断;依此类推进行比对; 时间复杂度:O(n3) 代码实现: cl...

Fly_Fly_Zhang的博客 2488

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最长回文串(中心扩散+动态优化)

找出字符串中最长回文串,暴力法及Manacher算法这里不列了,第一种不推荐,另一种想深入研究可自行搜索~~ 1 先介绍一下中心扩散思想: 从每一个位置,向二边扩散即可(区分奇数和偶数个数) 2 基于中心思想,利用动态规划,这里可推出具体的公式来 假设 d[i][j]表示字符串中第i个字符到第j个字符是否为回文串,则d[i-1[j+1] 可转化为: 若d[i][j]为回文串,则a[i-1]==a[j+1]时,d[i-1][j+1]为回文串,其它情况为false 当i-1== j+1 的时候就是两边界相等的时

yeyinfan123的博客 220

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

回文字符串—回文子串—中心扩散法

leetcode地址:5. 最长回文子串 解答参考:动态规划、中心扩散、Manacher 算法 问题描述: 给你一个字符串s,找到s中最长的回文子串。比如给定字符串s = "babad" ,找出最长的回文子串为"bab" 算法思路: 本题可以采用暴力破解法、中心扩散法、Manacher算法3种方法,本篇文章讲解暴力破解法。 暴力法采用双指针两边夹,验证是否是回文子串。除了枚举字符串的左右边界以外,比较容易想到的是枚举可能出现的回文子串的“中心位置”,从“中心位置”尝试尽可能扩散出去,得...

sanmi8276的博客 582

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python求字符串最大回文串(LeedCode练习题)

求最大回文串

YS1455的博客 1407

leetcode 笔记刷题(四)最长回文子串

5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 示例 3: 输入:s = "a" 输出:"a" 示例 4: 输入:s = "ac" 输出:"a" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母(大写和/或小写)组成 来源:力扣(LeetCode) 链接:https..

juluwangriyue的博客 475

算法 - 回文相关

文章目录1.判断是否回文2.最长回文子串3.分割回文串4.最短回文串Manacher 算法 O(n)KMP算法 1.判断是否回文 双指针做法的时间复杂度是 O(N),优化的解法是,先采用动态规划,把回文子串的结果记录在一个表格里。 /** * * @param charArray * @param left 子串的左边界,可以取到 * @param right 子串的右边界,可以取到 * @return */

littlewhitevg的博客 311

最长回文子串python暴力_leetcode 解题 5. 最长回文子串 python@ 官解,暴力法,动态法,manacher 法...

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。暴力法很明显,暴力法将选出所有子字符串可能的开始和结束位置,并检验它是不是回文。时间复杂度:O(n^2),往往利用python的切片可以很好的缩减复杂度如果不用切片,还需要遍历一次子字符串,时间复杂度就是O(^3)空间复杂度:O(1)ps: 官方给出的时间复杂度是没有考虑python切片的功能def force...

weixin_39700397的博客 130

Leetcode 5. 最长回文子串(Longest Palindromic Substring)

推荐理由:暴力解法太 naive,中心扩散不普适,Manacher 就更不普适了,是专门解这个问题的方法。而用动态规划我认为是最有用的,可以帮助你举一反三的方法。 补充说明:Manacher 算法有兴趣的朋友们可以了解一下,有人就借助它的第一步字符串预处理思想,解决了 LeetCode 第 4 题。因此以上推荐仅代表个人观点。 解决这类 “最优子结构” 问题,可以考虑使用 “动态规划”: 1...

月雲之霄的博客 289

马拉车manacher算法-最长回文子串(python)

参考链接: 1:https://www.felix021.com/blog/read.php?2040 2:https://blog.youkuaiyun.com/asd136912/article/details/78987624 3:https://blog.youkuaiyun.com/xingyeyongheng/article/details/9310555 【最好录个视频,便于把这个算法讲清楚】...

Hello Word! 3105

最长回文串-leetcode第五题

给出一个字符串,求出他的最长回文串。 已知的解法有三种,动态规划,中心扩散,manacher。这里准备使用前两种算法,另外一种暂时没时间研究。 解法1: 动态规划   对于回文串,单独的一个字符是回文串,两个相邻的字符相等时是回文串。 public String longestPalindrome(String s) { int ans = 0; String str = s.substring(1); // 回文串,对于字符串S,如果串p

watestill的博客 224

回文子串

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串,如aabaac中的aba和aabaa是两个回文子串。 思路一:中心拓展 回文串分两种: 奇数长度:中间的字母不用管,两侧的各自相等。 偶数长度:没有中间的字母,两侧的各自相等。 针对每个字母,作为奇数长度的回文串的中间的字母,进行扩散检查 针对相邻的两个字母,作为偶数长度的回文串,进行扩散检查 这样便可以在一次遍历中进行扩散检查,对不符合的情况立刻剪枝。

jinghe的知识屋 4507

数据结构与算法---Manacher算法

manacher算法是处理回文子串的一种经典算法。处理回文子串一般使用暴力匹配,动态规划,中心扩散,以及manachar。 在写manacher算法前我们先了解一下中心扩散以及动态规划。暴力匹配比较简单就不再阐述了。 中心扩散法 中心扩散法,顾名思义就是以某一个位置为中心,向周围扩散,直到满足条件或到达边界。中心扩散法的思路是:遍历每一个索引,以这个索引为中心,利用“回文串”中心对称的特点,往两边扩散,看最多能扩散多远。 代码实现: public String longestPalindrome1(Str

it浅阳的博客 678

力扣--5. 最长回文子串(中等题)

力扣--5. 最长回文子串(中等题)【题目描述】【示例】【解答--中心扩散】【思路】【代码】【看看官解】【中心扩散】【动态规划】【Manacher算法】 这是4天前尝试做,然后失败了的一题,当时大概瞄了一眼题解,大多都是动态规划、中心扩散法,当时觉得很难,就决定跳过,今天再做了一次,感觉整体思想和中心扩散法蛮接近的。 【题目描述】 给你一个字符串 s,找到 s 中最长的回文子串。 原题传送门 【示例】 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。

Catherinyy的博客 223
上一篇: 快速排序
下一篇: 19. 删除链表的倒数第N个节点
a-bit
博客等级 码龄10年 16粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值