最长回文子串

C++/C求最长回文子串 输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符串片段。回文的含义是:正着看和倒着看相同,如abba和xyyxyyx。在判断时,应该忽略所有标点符号和空格,且忽略大小写,但输出应该保持原样(在回文串的首部和尾部不要输出多余字串)。输入字符串长度不超过5000,且占据单独的一行。应该输出最长的回文串,如果有多个,输出其实位置最靠左的。 立即下载

              

给定字符串,寻找其最长回文子串

abcbaabcdcba => abcdcba

 

 顺序查找:

#include <iostream>
#include <cctype>
#include <cstring>

using namespace std ;

#define MAXN 5000+10

char buf[MAXN] , s[MAXN] , pos[MAXN] ; //增加了pos数组,记录下每个字母的位置;

int main() {
 int n , m , max = 0 ;
 int i , j , k ;
 int begin , end ;

 fgets(buf,MAXN,stdin) ;
 m = 0 ;
 for (i = 0 ; i < strlen(buf) ; ++ i) {
  if (isalpha(buf[i])) {
   if (buf[i] <= 'z') {
    pos[m] = i ;
    s[m++] = buf[i]+32 ;
   }
   else {
    pos[m] = i ;
    s[m++] = buf[i] ;
   }
  }
 } 
 for (i = 0 ; i < m ; ++ i) {
  for (j = i ; j < m ; ++ j) {
   int ok = 1 ;
   for (k = i ; k <= j ; ++ k) {
    if (s[k] != s[i+j-k]) {
     ok = 0 ;
    }
    if (ok && j-i+1>max) {
     begin = i ;
     end = j ;
     max = j-i+1 ;
    }
   }
  }
 }
 for (i = pos[begin] ; i <= pos[end] ; ++ i) {
  cout << buf[i] ;
 }
 cout << endl ;
 cout << max << endl ;

 return 0 ;
}

 

 效率较高的代码,这个是从中间往两边进行扩展的,可以提高效率:

#include <iostream>
#include <cstring>
#include <cctype>

using namespace std ;

#define MAXN 5000+10

char buf[MAXN] , s[MAXN] ;
int pos[MAXN] ;

int main() {
 int m , n , k , max = 0 ;
 int begin , end ;

 fgets(buf,MAXN,stdin) ;
 n = strlen(buf) ;
 m = 0 ; 
 for (int i = 0 ; i < n ; ++ i) {
  if (isalpha(buf[i])) {
   if (buf[i] <= 'z') {
    pos[m] = i ;
    s[m++] = buf[i]+32 ;
   }
   else {
    pos[m] = i ;
    s[m++] = buf[i] ;
   }
  }
 }  
 cout << endl ;
 for (int i = 0 ; i < m ; ++ i) {
  for (int j = 0 ; i-j >= 0 && i+j < m ; ++ j) {
   if (s[i-j] !=s[i+j]) {
    break ;
   }
   if (j*2+1 > max) {
    max = j*2+1 ;
    begin = pos[i-j] ;
    end = pos[i+j] ;
   }
  }
  for (int j = 0 ; i-j >= 0 && i+j+1 < m ; ++ j) {
   if (s[i-j] != s[i+j+1]) {
    break ;
   }
   if (j*2+2>max) {
    max = j*2+2 ;
    begin = pos[i-j] ;
    end = pos[i+j+1] ;
   }
  }
 }
 for (int i = begin ; i <= end ; ++ i) {
  cout << buf[i] ;
 }
 cout << endl << max << " " << end-begin+1 << endl ;

 return 0 ;
}

 

第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动) 本文详细介绍了TMC2240电机驱动芯片的正反转实现方法,重点解决方向切换时的抖动和冲击问题。文章首先明确了硬件连接、基础配置和使能状态三个前提条件,然后阐述了DIR引脚电平控制方向的核心原理,提供了STM32的GPIO配置代码。针对方向切换时的电流冲击问题,作者提出了"停止-延迟-切换-启动"的平滑切换逻辑,并给出了包含方向枚举、转速控制和方向切换函数的完整代码实现方案。通过这种优化方法,可以有效避免电机在正反转切换时产生的抖动、冲击声和发热问题,实现稳定的双向控制。文章还提示了后续可 阅读详情

相关推荐

HMC5883L磁力计在STM32F4上的I2C驱动与数据校准实战

本文详细介绍了HMC5883L磁力计在STM32F4平台上的I2C驱动开发与数据校准实战。通过解析寄存器配置、数据读取处理和椭圆拟合校准算法,帮助开发者实现精准的地磁测量,特别适用于无人机导航和机器人系统中的航向确定与陀螺仪漂移修正。

2y3u4i5o6p的博客 1037

C++多种解法求最大回文子串

最大回文字符串的几种解法

IT8343的博客 3170

Win10更新后黑屏只剩鼠标?火绒误杀explorer.exe的5种自救方案(附详细步骤)

本文详细介绍了Win10更新后出现黑屏只剩鼠标的5种专业修复方案,重点解决火绒误杀explorer.exe的问题。从基础的任务管理器操作到安全模式下的系统修复,再到注册表编辑和系统还原,提供了全面的解决方案,帮助用户快速恢复系统正常运行。

weixin_29306571的博客 637

C++ 最长回文字串

对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。要求:空间复杂度 𝑂(1)O(1),时间复杂度 𝑂(𝑛2)O(n2)进阶: 空间复杂度 𝑂(𝑛)O(n),时间复杂度 𝑂(𝑛)O(n)最长的回文子串为"aba"与"bab",长度都为3。数据范围: 1≤𝑛≤10001≤n≤1000。

GPU全栈博主 948

Muse Spark:功能、性能测试及使用方法

对于一个仅用九个月时间从零开始重建的团队来说,这样的健康状况和多模态测试结果无疑是迈出了坚实的第一步,并且经受住了独立测试的考验。Muse Spark 为每个产品确定了最重要的主题(A 产品的发布策略、B 产品的定价策略、C 产品的规模化策略),并提出了切实可行的具体行动方案。抽象视觉推理也遵循同样的模式:Muse Spark 的 ARC-AGI-2 得分为 42.5,而 GPT-5.4 和 Gemini 的得分都在 70 分左右。他的离职是由于组织结构的变化限制了他的角色,以及团队转向闭源开发。

xiaoshun007的专栏 123

【立创EDA-PCB设计基础】1.嘉立创EDA专业版软件安装+PCB基本概念+原理图绘制

本文详解PCB基本概念以及实现MCU最小系统原理图的绘制(原理图包括MCU芯片GD32F103C8T6、外部晶振、输出端口、USB输入口、5v转3v3稳压输出、复位按键、唤醒按键、LED)及嘉立创EDA专业版软件安装。为本专栏【立创EDA-PCB设计基础】后面章节实现PCB绘制做准备。

嵌入式阿齐Archie 3万+

C++ 最长回文子串

【代码】C++ 最长回文子串。

AdamShyly的博客 1261

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1142

C++_回文串

不是从0开始,需要有一点基础

m0_74922218的博客 3624

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 568

一文吃透 ABAP CDS SELECT:语法全景、关联与去重、可运行示例与实战心法

摘要: 本文深入解析ABAP中CDS视图的SELECT语法,重点介绍两种等价写法、关联与路径表达式优化、DISTINCT去重逻辑及WHERE/GROUP BY/HAVING/UNION等子句的应用。通过可运行的业务伙伴角色去重、关联路径查询及多角色筛选示例,演示如何将CDS特性转化为项目实践。强调关联复用性优于传统JOIN,并指出DISTINCT的权限边界与误用场景,帮助开发者从行式思维转向图式数据建模。(150字) 关键词: ABAP CDS、SELECT语法、路径表达式、DISTINCT去重、关联复用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

C语言最长回文子串

最长回文子串 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3053, Total Submissions: 4193 Description 输入一个字符串,求其中最长回文子串。子串的含义是:在字符串中连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断时要求忽略所有的标点和空格,且忽

geshengtong的博客 4838

第20期-英伟达笔试题型解析

英伟达作为AI领域的缔造者及硬件基石,是这几年最为炙手可热的公司。英伟达以其高性能GPU设计闻名,硬件工程师岗位的招聘通常包括笔试和技术面试,考察领域涵盖数字电路设计、处理器架构、嵌入式系统和信号处理等。通过搜索公开平台,收集了候选人的面试经历和相关技术问题,,通过分析公开平台收集的笔试面试经验,结合英伟达的GPU架构特点,整理出可能涉及的典型题目,并提供详细解析。 以下是基于英伟达(Nvidia)硬件工程师笔试题型的解析与总结,涵盖核心知识点、解题思路及案例分析。

启芯硬件的博客 746

最长回文子串与最长回文子序列

文章目录最长回文子串与最长回文子序列最长回文子串题目描述dp解法从中心扩展马拉车算法最长回文子序列题目描述dp 解法递归思想 最长回文子串与最长回文子序列 最长回文子串 LeetCode 链接: 5. 最长回文子串 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个...

charlsonzhao的博客 1599

Camera2Demo

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

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

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

【leetcode】回文子串、最长回文子串、最长回文子序列、最长回文串

中等给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。算法思路推荐看代码随想录(

SAVSORRY的博客 1784

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Leetcode 最长回文子串

最长回文子串 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 题目链接 class Solution { public: string longestPalindrome(string s) { int len = s.length(); int maxCount = 1; int tempCount = 1; int indexLeft = -1; // 遍历每一

一夜星尘 6106

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode 最长回文子串

运用动态规划的方法,查找最长回文子串的问题

"大梦三千秋的博客 540

Python最长回文子串

# 1.暴力解法(Brute Method) """ 暴力求解是最容易想到的,要截取字符串的所有子串,然后再判断这些子串中哪些是回文的,最后返回回文子串中最长的即可。 这里我们可以使用两个变量,一个记录最长回文子串开始的位置,一个记录最长回文子串的长度,最后再截取。 """ class Solution: def longestPalindrome(self, s): if (len(s) < 2): return s start .

weixin_42698464的博客 6751
上一篇: 关于sort()方法的使用
下一篇: 随机数的产生
evilying
博客等级 码龄16年 35粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值