C++代码算法题:(5).最长回文子串

C++代码算法题:(5).最长回文子串题目及要求:给你一个字符串s,找到s中最长的回文子串。提示:1<=s.length<=1000s仅由数字和英文字母(大写和/或小写)组成原创代码:classSolution{public:stringlongestPalindrome(strings){intbegin=0;//每个当前子串的开头intend=0;//每个当前子串的末尾intvalue=0;//判断条件使用。条

大家好,又见面了,我是你们的朋友全栈君。

题目及要求:

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

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成

原创代码:

class Solution { 

public:
string longestPalindrome(string s) 
{ 

int begin=0;//每个当前子串的开头
int end=0;//每个当前子串的末尾
int value=0;//判断条件使用。条件一:当形参string s不存在两个及两个以上元素个数的回文字串则value=1,条件二:当形参string s存在两个及两个以上元素个数的回文字串则value=0
int max=0;//记录历史回文字串的最大元素个数
string str;//代表当前回文串
string str_2=s[0];//代表最大回文串
for(begin=0;begin<=s.size()-1;begin++)
{ 

for(end=begin;end<=s.size()-1;end++)
{ 

value=0;
/*条件一:当形参string s不存在两个及两个以上元素个数的回文字串则value=1*/
for(int i=0;i<=(end-begin)/2;i++)
{ 

if(s[begin+i]!=s[end-i])
{ 

value=1;
break;
}
}
/*条件二:当形参string s存在两个及两个以上元素个数的回文字串则value=0*/
if(value==0)
{ 

str.erase(0,str.size());
for(int i=begin;i<=end;i++)
{ 

str.push_back(s[i]);
}
str_2=str.size()>max?str:str_2;
max=str.size()>max?str.size():max;
if(str_2.size()==s.size())
return str_2;
}
}
}
return str_2;
}
};

输出示例:

示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”
示例 4:
输入:s = “ac”
输出:“a”

代码思路:

首先:
定义变量,并将str_2用s[0]赋初值,用以当形参string s不存在两个及两个以上元素个数的回文字串则输出形参s的首元素

int begin=0;//每个当前子串的开头
int end=0;//每个当前子串的末尾
int value=0;//判断下一个字符是否属于当前子串
int max=0;//记录历史回文子串的最大元素个数
string str;//代表当前回文子串
string str_2=s[0];//代表最大回文子串

其次:
每一个子串(形参s元素s[begin]至s[end]之间的元素)都先判断条件一(当前子串是否存在两个及两个以上元素个数的回文字串)是否满足。若满足条件一,则进行

value=1;
break;

则str_2的值不改变为初值s[0],接下来继续进行循环

end++

如果当前子串(形参s元素s[begin]至s[end]之间的元素)不满足条件一,则由于此时

value=0;

则直接进入条件二来将str(形参s元素s[begin]至s[end]之间的元素)重新赋值(注意str表示当前的回文子串)并通过变量max来判断当前回文子串str与历史最大回文子串str_2的元素进行比较,如果当前回文子串str元素个数比历史最大回文子串str_2的元素个数更大则将历史最大回文子串str_2重新赋值
注意接下来的语句是用来缩小程序运行时间的

if(str_2.size()==s.size())
return str_2;

接下来继续进行循环

end++

最后:
当满足begin>s.size()-1时退出程序,执行

return str_2

反思所得:

在这道题的解题过程中,我开始的时候是不明白回文的定义是什么的,但是经过代码的不断上传和查看他人的讲解,我明白了回文的定义(类似于“上海自来水来自海上”),了解了回文的定义我就重新修改了思路,为了简便算法,我开始考虑将程序分条件编程,并且在每个条件内尽量减少程序进行无用的部分。

LeetCode链接:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132343.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Vue 父组件向子组件传递动态参数,子组件如何实时更新[通俗易懂]

    项目问题介绍:父组件中填入各种查询条件,点击查询按钮查出符合条件的数据。其中,数据列表是引入的子组件。第一次加载的时候,子组件数据正常显示,再次查询的时候子组件怎么实现实时更新呢?解决办法:子组件watch中(监听)父组件数据的变化以自己的项目为例:父组件:这是父组件中如何引用的子组件。testParams是我需要传过去的参数对象。参数名是params。子组…

  • idea 2021.05激活码【在线破解激活】

    idea 2021.05激活码【在线破解激活】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 用Xshell连接虚拟机Linux「建议收藏」

    用Xshell连接虚拟机Linux「建议收藏」首先,要将虚拟机中的Linux系统设置为桥接模式。然后进一步确认虚拟机的ip地址跟本机地址在同一个网段(要ping的通)。具体操作如下:1、查看我本机的IP地址是:10.253.0.512、继续查看虚拟机中linux系统的IP地址是:10.253.0.91然后在windows上ping一下:可见完全是ping的通的。3、接下来配置Linux的

  • 面向对象设计大作业——火车售票系统

    面向对象设计大作业——火车售票系统

  • aero是什么意思啊_自动驾驶视觉算法

    aero是什么意思啊_自动驾驶视觉算法数据集介绍aeroscapes数据集下载链接AeroScapes航空语义分割基准包括使用商用无人机在5到50米的高度范围内捕获的图像。该数据集提供3269张720p图像和11个类别的真实掩码。数据加载dataloder写法(基于pytorch)由于该数据集提供了掩码图,因此不需要进行掩码图转换。下载完成后,文件结构如下:ImageSets文件夹:存放了两个txt文件,划分了训练集和验证集。JPEGImages文件夹:存放了RGB图像。SegmentationClass

  • JWT原理详解_电磁感应现象原理

    JWT原理详解_电磁感应现象原理1.COOKIE使用和优缺点1.1cookie原理:用户名+密码cookie是保存在用户浏览器端,用户名和密码等明文信息1.2session使用原理session是存储在服务器端的一段字符串,相当于字典的key1.用户向服务器发送用户名和密码。2.验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中。3.服务器向用户返回session_id,session信息都会写入到用户的Cookie。4.用户的每个后续请求都将通过在Cookie中取出session_id传给

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号