首页 > 其他 > 详细

1040 Longest Symmetric String (25point(s)) 需要二刷 *动态规划 回文子串问题

时间:2020-02-24 13:02:57      阅读:76      评论:0      收藏:0      [点我收藏+]

基本思想:

后续总结,详见数据结构典型问题——动态规划篇;

 

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector> 
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<set>
#include<stack>
using namespace std;

const int maxn = 1010;

int dp[maxn][maxn];

int main() {
	string s;
	int ans = 1;
	getline(cin, s);
	int len = s.size();
	//进行dp数组初始化;
	//单个字符可以构成一个回文子串;
	for (int i = 0; i < len; i++) {
		dp[i][i] = 1;
	}
	for (int i = 1; i < len; i++) {
		if (s[i] == s[i - 1]) {
			//如果相邻的两个字符可以构成回文子串;
			dp[i][i - 1] = dp[i - 1][i] = 1;
			ans = 2;
		}
	}
	//进行整体初始化;
	for (int l = 2; l < len; l++) {
		//直接加索引个数,不再看长度;
		for (int i = 0; i + l < len; i++) {
			if (s[i] == s[i + l]&&dp[i+1][i+l-1]==1) {
				dp[i][i + l] = dp[i + l][i] =1;
				ans = l + 1;
			}
		}
	}
	//cout << dp[0][len - 1] << endl;;
	cout << ans << endl;
	return 0;
}

  

1040 Longest Symmetric String (25point(s)) 需要二刷 *动态规划 回文子串问题

原文:https://www.cnblogs.com/songlinxuan/p/12355997.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!