uva 11404 Palindromic Subsequence(LCS回文串,最小字典序)


 

本文出自   http://blog.csdn.net/shuangde800


 


题目: 点击打开链接


题目大意

给一个字符串,输出它的最长回文串,如果有多个结果,输出字典序最小的。


思路

我们都知道把一个字符串逆序后和原字符串进最长公共子序列,可以计算出它的最长回文串长度。
但是这题不仅要输出回文串,而且还要求是字典序最小的,所以挺难搞的。

设str1是正序字符串,str2是逆序后的字符串
f[i][j].len 表示str1的前i位,str2的前j位,最长公共子串的长度
f[i][j].str 表示str1的前i位,str2的前j位,最长公共子串的最小字典序的字符串

状态转移和正常的LCS差不多,只不过增加了记录字典序最小的字符串

但是最终的f[i][j].str却并不一定是答案,因为计算出来的最长公共子序列不一定就是回文串

例如:
kfclbckibbibjccbej
jebccjbibbikcblcfk

bcibbibc是他们的LCS,但是却不是回文串


但是它的前len/2个一定是回文串的前半部分
知道了前len/2,就可以直接构造出回文串的后半部分了
要注意长度的奇偶性问题


代码

 

 

 

 



 

你可能感兴趣的:(sequence)