《剑指offer》面试题20:回文子字符串的个数

【回文串【1】】 回文串的c++保姆级讲解【1】基础题进阶1——最长回文子串 基础题 先来看一个最简单的回文串题目:(lk409) 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。比如: 输入:“abccccdd” 输出:7 这道题对基本的回文串的顺序啊排列啊没有要求,也就是说,给定的字符串相当于无序的,我们只要研究一下如果想构成回文串,对字符串的每个字符的数量的要求是多少就行了。 构成回文串的字符数量要求: 1、 阅读详情
"""
题目:给定一个字符串,请问该字符串中有多少个回文连续子字符串?例如,字符串'ABC'有3个回文子字符串,分别为'A','B','C';
     而字符串‘AAA'有6个回文子字符串,分别为’A','A','A','AA','AA','AAA'
解题思路:这个题上来一看,我的脑子里就把它翻译为求子字符串为回文的个数。
        前面已经做了很多子数组或者子字符串的题了,那一定是要用到双指针了。核心逻辑就是如何移动双指针。
        首先确定双指针的起始位置和方向:
        如果按照之前的两道回文的题目的逻辑,将双指针放在字符串的两头,然后向中间移动,思考一下就会发现移动完以后,只能得到一个回文
        因此参考前面满足条件的子字符串的个数的逻辑(第14~17题),指针P1和指针P2应都从左边向右边移动。
        然后确定双指针的移动算法:
        回文不仅能通过从两端往中间看是否两端相等,也可以从中间开始逐步向两边扩散看两端是否相等。
        因此参考这个逻辑,我们可以将指针逐个指向子回文的中间,然后判断它两端的字符是否一致,直到字符串两端。
        例如,刚开始指向第一个元素,然后向两端扩散,扩散完后,发现只有它自己的回文。然后指向第二个元素,如此循环,直到指向最后一个元素。
        这里要注意的是,回文的长度可以为奇数,也可以为偶数。长度为奇数的的回文对称中心只有一个字符,长度为偶数的字符串对称中心有两个字符。
        因此如果是奇数字符串,两个指针应都从一个位置开始。如果是偶数字符串,指针P2要比指针P1多1.
"""
import re


def mirror_count_from_middle(t, start, end):
    count = 0
    while start >= 0 and end <= len(t)-1 and t[start] == t[end]:
        start -= 1
        end += 1
        count += 1
    return count


def mirror_count(t):
    pattern = re.compile('[a-zA-Z0-9]')
    new_t = pattern.findall(t.upper())
    count = 0
    for i in range(len(new_t)):
        count += mirror_count_from_middle(new_t, i, i)
        count += mirror_count_from_middle(new_t, i, i+1)
    return count

t = 'aaa'
t1 = 'abc'
t2 = 'asdffgg'
t3 = ''
print(mirror_count(t))
print(mirror_count(t1))
print(mirror_count(t2))
print(mirror_count(t3))
《剑指 Offer》专项突破版 - 面试题 94 : 最少回文分割(C++ 实现) 动态规划相关的单序列问题 阅读详情

相关推荐

浅谈回文串问题

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

Alfeim的博客 2256

字符串之回文串

本专题主要讲解leetcode上的几道关于回文串的几道简单题,均用C语言编写。 首先,我们介绍下什么是回文串,它是指正读和反读都是一样的字符串,举个例子,例如:“abba”是一个回文串,“abca”则不是。 下面直接看leetcode题,题目如下: 题目的意思比较简单,就是判断一个字符串是否能够组成回文串。 分析: 回文串的特点: 1. 如果字符串中出现的字符个数全为偶数,则一定可以组成回文子串; 2. 如果字符出现个数为奇数,并且该字符串里面有两个出现奇数的字符,则不可能组成回文串。 .

leexing17的博客 7964

vivado:差分信号和单端信号 的相互转换 IBUFDS OBUFDS

FPGA能处理的都是单端信号,但有些输入信号是差分的,这时候就需要把差分信号转为单端信号。

qq_52137732的博客 1万+

回文字符串

(1)判断一个字符串是不是回文子串,分为两种情况,一种是字符串的长度为奇数个,另一种为偶数个,当为偶数个时对称相等就行。当为奇数个时,注意考虑要有一个字符的情况。 代码实现: #include&lt;iostream&gt; #include&lt;string.h&gt; using namespace std; int main() { int n; cin&gt;&gt;n; ...

feiliboos 186

雷达信号处理中的CLEAN算法实现与优化

在信号处理领域,杂波抑制是提升目标检测性能的关键技术。CLEAN算法作为一种迭代去卷积方法,通过逐步提取最强信号分量并消除其影响,有效解决了传统方法在复杂环境下的局限性。该算法结合自适应阈值和噪声基底估计,显著提高了雷达信号处理的精度和鲁棒性。在工程实践中,CLEAN算法广泛应用于气象雷达、地物杂波抑制等场景,通过Matlab仿真可以快速验证算法性能并优化参数设置。本文重点探讨了CLEAN算法在雷达信号处理中的实现细节和优化技巧,包括距离徙动补偿、多普勒补偿等关键技术。

weixin_32430941的博客 264

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 399

字符串:子字符串回文的个数

求子字符串回文个数。 可以采取以子字符串中心,向外扩散的方式,移动指针来求回文的个数。需要注意中心点的选取分成回文长度是偶数和奇数两种情况。

输出与提升 2512

从Multibit到Debanking:芯片设计中的时序优化完整流程解析(含真实案例)

本文深入解析芯片设计中Multibit技术与Debanking的时序优化完整流程,结合7nm移动SoC真实案例,详细探讨Multibit的核心优势、实施条件及潜在风险,并提供Debanking的触发时机与操作策略。通过平衡Multibit与Debanking,工程师可有效优化PPA(Power-Performance-Area),提升芯片设计效率。

weixin_30316097的博客 462

manacher算法:回文串的O(n)算法

一般来说求回文串用hash或者后缀数组,但后缀数组是O(nlog(n)),hash比较麻烦,所以我们可以换一种O(n)的求回文串的算法。 对于回文串一般来说会有奇数和偶数之分,但是我们可以把串的头尾加上#号再把每个字符串之间加上#号,然后求每个点以它为中心的最长半径,对于偶数会问它的中心是#。 #include #include #include #include using namespac

huantwofat 800

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”

基于之前的开发程序通过Jetson Xavier NX 硬编码的H265发出后,上位机断点播放发出来的H265码流,会报“PPS id out of range” 错误。

jzwjzw19900922的博客 3812

LeetCode 剑指 Offer II 回溯(下) 专题总结

回溯专题结束,接下来就是难啃的动态规划!关注博主,带你刷穿剑指offer

一只小逸白 1万+

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1333

剑指Offer(数据结构与算法面试题精讲)C++版——day7

剑指Offer(数据结构与算法面试题精讲)C++版——day7 题目一:最多删除一个字符得到回文 题目二:回文子字符串的个数 题目三:删除倒数第k个节点

weixin_46560512的博客 1149

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1613

Camera2Demo

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

《剑指 Offer》专项突破版 - 面试题85、86 和 87 : 使用回溯法解决其他类型的问题(C++ 实现)

面试题 85 : 生成匹配的括号 面试题 86 : 分割回文子字符串 面试题 87 : 恢复 IP 地址

melonyzzZ的博客 728

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【leetcode】剑指Offer专项突击版含注释 Java版本(一)

以下文章主要是方便自我学习总结 感兴趣的也可一键三连互相学习 大部分算法题都是刷过很多次,知识点也比较重复,特殊情况下会重点讲解下代码思路 对应另一套算法题: 字节校园精选 66 道高频经典笔面试题(含多种思路)(上) 字节校园精选 66 道高频经典笔面试题(含多种思路)(下)

码农研究僧的博客 1578

假人有限元模型

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

《剑指 Offer》专项突破版 - 面试题 18、19 和 20 - 详解回文字符串(C++ 实现)

面试题 18 : 有效回文 面试题 19 : 最多删除一个字符得到回文 面试题 20 : 回文子字符串的个数

melonyzzZ的博客 1103

【剑指 Offer(专项突击版)】 018 - 020 刷题笔记 回文 【双指针、DP、中心扩展】

文章目录[018 - 剑指 Offer II 018. 有效的回文【双指针】](https://leetcode-cn.com/problems/XltzEq/)[019 - 剑指 Offer II 019. 最多删除一个字符得到回文【贪心+双指针】](https://leetcode-cn.com/problems/RQku0D/)[020 - 剑指 Offer II 020. 回文子字符串的个数【动态规划、中心扩展】](https://leetcode-cn.com/problems/a7VOhD/)方

一定要站在自己热爱的生活里闪闪发光 6427

剑指offer(专项突破版):数据结构与算法名企面试题精讲 刷题记录

自己记录的刷题笔记

weixin_45883188的博客 1404

剑指Offer题目笔记25(使用回溯法解决其他类型问题)

当处理到字符串中的某个字符时,如果包括该字符在内后面还有n个字符,那么此时面临n个选项,即分割出长度为1的子字符串(只包含该字符)、分割出长度为2子字符串(即包含该字符及它后面的一个字符),以此类推,分割出长度为n的子字符串(即包含该字符在内的后面的所有字符)。因为要生成n个左括号和n个右括号,故需要走2n步,每一步生成一个括号,每一步都面临两个选项,既可能生成左括号也可能生成右括号。​ 输入一个正整数n,输出所有包含n个左括号和n个右括号的组合,要求每个组合的左括号和右括号匹配。

weixin_68854858的博客 648

【LeetCode】剑指 Offer Ⅱ 第3章:字符串(7道题) -- Java Version

本章的题目主要分为两种类型:变位词 和 回文;对应的解题思路主要是双指针,对于变位词,我们可以使用一个哈希表来统计每个字符出现的次数,从而判断两个字符串是不是一组变位词。对于回文,我们可以选择从两端向中间移动双指针,也可以选择从中间向两端移动。014. 字符串中的变位词 \ 015. 找到字符串中所有字母异位词 \ 016. 不含重复字符的最长子字符串 \ 017. 最小覆盖子串【变位词】;018. 有效的回文 \ 019. 最多删除一个字符得到回文 \ 020. 回文子字符串的个数【回文字符串】。

汤姆lazy的优快云博客 1000

回文字符串判断以及最长回文字符串长度判断

回文字符串,就是正着反着读都一样的字符串。 1、回文字符串判断 假如这个字符串为奇数长度的回文字符串,则除了最中间的字符外,其左右的字符串两两相同。 假如这个字符串为偶数长度的回文字符串,则其左右完全对称。 代码如下: #include<iostream> #include<string> using namespace std; bool palindrome(strin...

vanvanvane的博客 1825

回文字符串——庞果网

题目依旧是来自庞果网。 题目详情: 回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串。 输入:非空仅由小写字母组成的字符串,长度不超过100; 输出:能组成的所有回文串的个数(因为结果可能非常大,输出对1000000007取余数的结果)。 例如:输入"aabb" 输出为2(因为“aabb”对应的所有回文字符

chengyxc的专栏 1422

为何除了11以外,回文质数都是奇数位数?

也就是说,偶数位数回文数必定不是正数 回忆小学数学, 如果差是0(0也能被11整除)即奇数位数字之和与偶数位数字之和相同,这个数也能被11整除 而所有的偶数位回文数必定满足上面这个条件,因此回文质数都是奇数位数 ...

qq_52445079的博客 745

回文 - 回文的性质

回文的性质 以前,一看到回文这两个字我就头大。记得有一次去面试的时候,我看到回文,脑子一片空白(PS: 菜的呀 TvT )。前两天松鼠做了回文的问题,他说其实掌握了回文的性质其实还好。我一听,对!问题的关键在于要先把性质梳理一下,之后很多问题就迎刃而解了!接下来,我们就一步步来吧! 回文定义 - Palindrome 一个数字或者字符串正读/反读都一样,例如,1221,123454321,“abcdcba”等等。 首先,给大家一个判断String是否为回文的算法。 public boolean

zhaoyangyingmu的博客 3615
上一篇: 《剑指offer》面试题19:最多删除一个字符得到回文
下一篇: 分享:使用Python构造链表
inside802
博客等级 码龄9年 66粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值