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/

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新东方四六级写作_新东方四六级老师

    新东方四六级写作_新东方四六级老师必读的新东方优秀范文      欢迎下载>01 The Language of MusicA painter hangs his or her finished picture on a wall, and everyone can see it. A composer writes a work, but no one can hear it until i

    2022年8月24日
  • 物理地址介绍「建议收藏」

    物理地址介绍在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(PhysicalAddress),又叫实际地址或绝对地址。计算(此类计算可直接使用计算机进行计算,总结来说就是进制之间的转换):地址(字节编址)10242^10b1KB100000000001K…

    2022年4月4日
  • 《圣经》心得——孙继滨

    《圣经》心得——孙继滨

    2021年8月11日
  • ASP.Net之发展史「建议收藏」

    ASP.Net之发展史「建议收藏」前言    小咸儿在学习Asp.net之后,对于asp.net的认知一直模糊不清,今天就来给大家分享一下Asp.net到底是什么?而且了解了Asp.net的发展史后才能够明白Asp.net给我们带来了多大的福利,以及让自己如何从设计者的角度去思考Asp.net。    ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。

    2022年7月11日
  • pycharm2021.8.2激活码_最新在线免费激活

    (pycharm2021.8.2激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月25日
  • cas 原理分析

    cas 原理分析CAS原理分析1、了解java中锁的类型1.1悲观锁(PessimisticLock)顾名思义,就是很悲观,假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。1.2乐观锁(OptimisticLock)顾名思义,就是很乐观,假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。乐观锁不能解决脏读的问题。每次拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,

    2022年10月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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