题目地址:
http://acm.nyist.net/JudgeOnline/problem.php?pid=17
题目内容:
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
- 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
代码如下:
#include<iostream> #include <string> using namespace std; int main() { int n; cin >> n; while (n--) { string str; int count = 1; cin >> str; int a[200]; a[0] = -999; for (int i = 0;i < str.length();i++) { for (int j = count - 1;j >= 0;j--) { if ((int)str[i] > a[j]) { a[j + 1] = str[i]; if (j + 1 == count) count++; break; } } } cout << count - 1 << endl; } return 0; }
注1:以上代码只能求出单调递增最长子序列的长度,如果需要输出最长单调递增最长子序列,需要对代码做点改动。
注2:代码来自网上。
代码分析:自己做了几遍,都是超时,看完这个代码后,发现其实自己理解错题目的意思了,所以做的才会有问题,想的太多了。
自以为思路清晰,其实思路混乱,还要改进,多做题,多和高手交流。
输入