单调递增最长子序列

单调递增最长子序列

 
描述

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

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

 

Accepted

  1.    
  2. #include<stdio.h>  
  3. int length(char * s)  
  4. {  
  5.     int len[128] = {0}, i, t;  
  6.     for(; *s != '\0' && (t = len[*s - 1] + 1); s++)  
  7.     for(i = *s; i < 128 && len[i] < t; len[i++] = t);  
  8.     return len[127];  
  9. }  
  10. int main()  
  11. {  
  12.     int n;  
  13.     char s[10001];  
  14.     for(scanf("%d\n", &n); n--;)  
  15.     printf("%d\n", length(gets(s)));  
  16.     return 0;  
  17. }  
  18.          
posted @ 2015-05-23 15:37  handsomecui  阅读(189)  评论(0编辑  收藏  举报