leetcode最长回文子串_最长回文子串算法

leetcode最长回文子串_最长回文子串算法C++实现——最长回文子串

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。

所谓回文串,指左右对称的字符串。

所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串

(注意:记得加上while处理多个测试用例)

输入描述:

输入一个仅包含小写字母的字符串

输出描述:

返回最长回文子串的长度

示例:

输入:

cdabbacc

输出:

4

说明:

abba为最长的回文子串

解题思路:

这题用双循环解决。从头开始一层遍历,从后开始一层遍历;每个节点,令m=i,n=j,当某个位置str[m]与str[n]相等时进入while循环,m++、n–,同时用t记录回文一半长度的尺寸,若为回文则到中间位置,m会大于等于n;如果m和n相等,说明回文字符数为奇数,则回文长度为2*t+1,若m>n,说明回文字符数为偶数,则回文长度为2*t,同时更新max,max为最长回文长度。

测试代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    string str;
    while(getline(cin,str))
    {
        int max=0;
        int size=str.size();
        for(int i=0;i<size;++i)
        {
            for(int j=str.size()-1;j>i;--j)
            {
                int m=i,n=j,t=0;
                while(str[m]==str[n])
                {
                    t++;
                    m++;
                    n--;
                    if(m>=n)
                    {
                        if(m==n)
                            t=2*t+1;
                        else
                            t=2*t;
                        if(t>max)
                            max=t;
                        break;
                    }
                }
            }
        }
        cout<<max<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • sigaction检测段错误示例[通俗易懂]

    sigaction检测段错误示例[通俗易懂]#include#include#include#include#include#include#include#defineARRAY_SIZE(a)sizeof(a)/sizeof(a[0])#defineDEBUG#ifdefDEBUG #defineLOG(fmt,args…)printf(“%s():%d”fmt,__FUNC

    2022年5月26日
    35
  • java h2 数据库_H2数据库介绍「建议收藏」

    java h2 数据库_H2数据库介绍「建议收藏」一、H2数据库简介1、H2数据库是一个开源的关系型数据库。H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群2、提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面二、在Java中操作H2数据库1、以嵌入式(本地)连接方式连接H2数据库这种连接方式默认情况下只允许有一个客户端连接到…

    2022年10月12日
    2
  • C语言背包问题

    C语言背包问题0/1背包问题一个旅行者有一个最多能装MM公斤的背包,现在有nn件物品,它们的重量分别是W1,W2,…,WnW1,W2,…,Wn,它们的价值分别为C1,C2,…,CnC1,C2,…,Cn,求旅行者能获得最大总价值。【输入】第一行:两个整数,MM(背包容量,M<=200M<=200)和NN(物品数量,N<=30N<=30);第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。【输出】仅一行…

    2022年7月14日
    12
  • GitHub开源神器:教你如何实现 PDF 转 Word

    GitHub开源神器:教你如何实现 PDF 转 Word点击上方“Github爱好者社区”,选择星标回复“资料”,获取小编整理的一份资料作者:GG哥来源:GitHub爱好者社区(github_shequ)这是GitHub爱好者社区第34篇…

    2022年5月20日
    156
  • 向量的内、外积及其几何含义

    向量的内、外积及其几何含义一、向量的内积(点乘)定义概括地说,向量的内积(点乘/数量积)。对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,如下所示,对于向量a和向量b:a和b的点积公式为:这里要求一维向量a和向量b的行列数相同。注意:点乘的结果是一个标量(数量而不是向量)定义:两个向量a与b的内积为a·b=|a||b|cos∠(a,b),特别地,0·a=a·0…

    2025年6月14日
    2
  • prototype.js中的class.create()方法

    prototype.js中的class.create()方法Class.createClass.create([superclass][,methods…])→Classsuperclass (Class) –Theoptionalsuperclasstoinheritmethodsfrom.methods (Object) –Anobjectwhosepropertiesw

    2022年7月22日
    12

发表回复

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

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