求单调递增最长子序列(动态规划)

题目描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入

aaa
ababc
abklmncdefg

样例输出

1
3
7

解题思路:从前往后遍历,计算每一个字符处于递增序列(在这个字符之前的最长的递增序列)的第几个位置(遍历找到)。


代码实现:

using System;

namespace cchoop
{
    class Program
    {
        public static void Main()
        {
            Console.WriteLine(Test("aaaa"));
            Console.WriteLine(Test("aababc"));
            Console.WriteLine(Test("abc"));
            Console.WriteLine(Test("xabklmnopqrstcdefg"));
            Console.WriteLine(Test("abklmncdefgggggggf"));
        }

        public static int Test(string str)
        {
            char[] arr = str.ToCharArray();
            int length = arr.Length;
            int[] maxCountPosition = new int[length];

            int maxCount = 1;
            for (int i = 0; i < length; i++)
            {
                maxCountPosition[i] = 1;
                for (int j = 0; j < i; j++)
                {
                    if (arr[i] > arr[j])
                    {
                        int tempCount = maxCountPosition[j] + 1;
                        if (tempCount > maxCountPosition[i])
                        {
                            maxCountPosition[i] = tempCount;
                            if (tempCount > maxCount)
                            {
                                maxCount = tempCount;
                            }
                        }
                    }
                }
            }

            return maxCount;
        }

    }
}


你可能感兴趣的:(数据结构与算法)