码迷,mamicode.com
首页 > 其他好文 > 详细

1040. Longest Symmetric String (25)

时间:2019-12-30 23:15:03      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:状态   return   csharp   bsp   space   std   amp   cto   数组   

#include<stdio.h>
#include<iostream> 
#include<vector>
#include<string>
using namespace std;
int f[1010][1010] = {0};
int main()
{
	string s;
	getline(cin,s);
	int ans = 1;
	for(int i=0,tmp = s.length();i<tmp;i++){
		 f[i][i] = 1;
		 if(i<tmp-1 && s[i] == s[i+1]){
		 	f[i][i+1] = 1;
		 	ans = 2;
		 }
	}
	for(int L = 3,tmp = s.length();L<=tmp;L++){
		for(int i = 0;i+L-1<tmp;i++){
			int j = i + L -1;
			if(s[i] == s[i+L-1] && f[i+1][j-1] == 1){
				  f[i][j] = 1;
				  ans = L;
			}
		}
	}
	printf("%d",ans);
	return 0;
}

 

 题目大意:求一串字符串中的最长回文子串;

总结:

  动态规划未必要在最后通过数组右下角的值确定,可以在求解的过程中更新,数组的最有用于保存之前递推的状态,相比直接暴力枚举节省了重复判断的时间

  di 表示从i到j的子串是否是回文串 是 1,不是 0;

   1. 递推方程: s[i] == s[j] di = di+1;

         s[i] != s[j] di = 0;  

2.边界(需要预处理) ;di =1; di = s[i] == s[i+1]?1:0;

 i,j 如果从小到大顺序枚举,无法保证在更新di时,di+1已经被更新过了,

考虑枚举子串的起点和子串的长度,后面的状态长度为3.4...由前面的结果长度为1,2...更新

 3.注意长度和下标的表示

1040. Longest Symmetric String (25)

标签:状态   return   csharp   bsp   space   std   amp   cto   数组   

原文地址:https://www.cnblogs.com/zxzmnh/p/12121928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!