动态规划算法求最长回文子串

动态规划算法求最长回文子串给出了动态规划方法求最长回文子串的程序及分析。

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

回文串就是正着读和反着读一样的字符串,如“abba”,”abcba”,最长回文子串是字符串的子串中最长的属于回文串的子串。如字符串”abbaabccba”的最长回文子串为”abccba”,本文采用动态规划算法来查找最长回文子串,算法时间复杂度为O(n²)。设状态dp[j][i]表示索引j到索引i的子串是否是回文串。则易得转移方程如下:

动态规划算法求最长回文子串

则dp[j][i]为true时表示索引j到索引i形成的子串为回文子串,且子串起点索引为i,长度为j+i-1。

具体程序如下:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
	string longestPalindrome(string s) {
		const int n=s.size();
		bool dp[n][n];
		fill_n(&dp[0][0],n*n,false);
		int max_len=1; //保存最长回文子串长度
		int start=0;//保存最长回文子串起点
		for(int i=0;i<s.size();++i)
		{
			for(int j=0;j<=i;++j)
			{
				if(i-j<2)
					dp[j][i]=(s[i]==s[j]);
				else
					dp[j][i]=(s[i]==s[j] && dp[j+1][i-1]);
				if(dp[j][i] && max_len<(i-j+1))
				{
					max_len=i-j+1;
					start=j;
				}
			}
		}
		return s.substr(start,max_len);
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	string input;
	Solution sln;
	while(cin>>input)
	{
		cout<<"最长回文子串为:"<<sln.longestPalindrome(input)<<endl;
	}
	return 0;
}

输入abbaabccba时,程序运行结果如下:

动态规划算法求最长回文子串

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

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

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


相关推荐

  • eclipse乱码问题如何解决_虚拟机乱码怎么解决办法

    eclipse乱码问题如何解决_虚拟机乱码怎么解决办法 1、eclipse的编码不能改成GBK解决办法:gedit/var/lib/locales/supported.d/zh加入这一行:zh_CN.GBKGBK保存之后再启动eclipse,就可以把编码改成GBK了,不过还是要手工输入,不能选。还有另一种方法,可以看这里:http://thinkbase.net/w/main/Wiki?2006-05-11+%E4%BB%8E%E4

    2025年5月25日
    2
  • SOAP协议的深度解析

    SOAP协议的深度解析笔记上传:1.soap与http的区别:HTTP只负责把数据传送过去,不会管这个数据是XML、HTML、图片、文本文件或者别的什么。( HTTP就是邮局的协议,他们规定了你的信封要怎么写,要贴多少邮票等。。。。)而SOAP协议则定义了怎么把一个对象变成XML文本,在远程如何调用等  (SOAP就是你们之间交流的协议,负责把你所需要表达的意思写在信纸上,同时也负责让对方能够看得懂你的信。)2.s…

    2022年7月13日
    14
  • 放单平台_自媒体哪个平台好

    放单平台_自媒体哪个平台好Iamdoingaclustertest,whydidIencounterthelderrorwhencompilingtheseveralpackagesfrom/home/builder/master/master50/master_eXtremeDB_4.0.1780_linux/packs_x64.Theerrorinfoisbelow:ly@l…

    2022年10月15日
    2
  • Linux系统如何查看版本信息

    Linux系统如何查看版本信息

    2021年10月14日
    67
  • 你的代码完成了吗?(末篇)——对系统总体的影响以及安全性

    你的代码完成了吗?(末篇)——对系统总体的影响以及安全性

    2021年8月5日
    56
  • rtp载荷类型_架体荷载

    rtp载荷类型_架体荷载 1简介在Internet上用分组传送话音的质量不够好的一个重要原因是比较高的丢包率。尤其在广域网中,这个问题相当突出。不幸的是,实时多媒体业务对于延时的要求相当严格,因此不大可能通过重传来解决丢包的问题。正是出于这个原因,大家提出用前向纠错(FEC)来解决Internet上的丢包问题[1][2]。尤其是对于传统纠错码如校验码、RS码、汉明码等的使用引起了很多人的注意。为了能够更好地应用这些纠错码

    2022年8月11日
    5

发表回复

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

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