爱丽丝和鲍勃想去旅行。
他们每个人制定了一条旅行路线,每条路线包含一个按给定顺序访问的城市列表,一个城市可能会多次出现在同一路线中。
因为他们想要一起去旅行,所以必须在旅行路线上达成一致。
他们两个都不想改变他们的路线上的城市顺序或者在路线上额外添加城市。
因此,他们只能移除各自路线中的一些城市,使得旅行路线达成一致,并且尽可能的长。
该地区共有26个城市,用小写字母’a’到’z’表示。
输入格式
输入包含两行,第一行是爱丽丝的路线城市列表,第二行是鲍勃的路线城市列表。
每个列表由1到80个小写字母组成,其间没有空格。
输出格式
按升序顺序输出所有满足条件的路线列表。
每个路线列表占一行。
输入样例:
abcabcaa
acbacba
输出样例:
ababa
abaca
abcba
acaba
acaca
acbaa
acbca
思路:这是一道经典的dp最长公共子序列(LCS)的问题, 众所周知:
用f[i][j]表示a串的前i个字符与b串的前j个字符的最长公共子序列长度
最长公共子序列,即:当a[i]==b[j]时,f[i][j]=f[i-1][j-1]+1
否则,f[i][j]=max(f[i-1][j],f[i][j-1])
而这里要输出具体的方案,所以额外用到两个数组p