您的位置:首页 > 其它

单调递增最长子序列(南阳理工ACM)

2013-07-06 21:54 239 查看
描述

求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4

输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入
3
aaa
ababc
abklmncdefg

样例输出
1
3
7


有两种方式可以求解,

解法一:

首先对字符串S1进行从小到大排序,然后删除有序数组相同的字符得到S2。再求S1与S2的最长子串即可(求子串的方法见两个字符串的最长相同子序列)。

排序方法:

public static int LongestAddSubsequence(string A)
{
int longest = 1;
int[] dp = new int[A.Length];
for (int i = 0; i < A.Length; i++)
dp[i] = 1;//初始话均为1
for (int i = 1; i < A.Length; i++)
for (int j = i - 1; j >= 0; j--)
if (A[i] > A[j] && dp[i] < dp[j] + 1)//遇到比当前值小,并且长度比当前长度大的就更新当前长度
dp[i] = dp[j] + 1;
for (int i = 0; i < A.Length; i++)
if (dp[i] > longest)
longest = dp[i];
return longest;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: