描述 求一個字元串的最長遞增子序列的長度 如:dabdbf最長遞增子序列就是abdf,長度為4輸入 第一行一個整數0<n<20,表示有n個字元串要處理 隨後的n行,每行有一個字元串,該字元串的長度不會超過10000輸出 輸出字元串的最長遞增子序列的長度 ...
描述
求一個字元串的最長遞增子序列的長度
如:dabdbf最長遞增子序列就是abdf,長度為4
輸入
第一行一個整數0<n<20,表示有n個字元串要處理
隨後的n行,每行有一個字元串,該字元串的長度不會超過10000
輸出
輸出字元串的最長遞增子序列的長度
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int dizeng(char a[]) { int x[10000] = {0};//全局變數 x[0] = 1; int i, j; int n = strlen(a); for(i = 1; i <= n - 1; i++)//尋找數組中長度最長的遞增子數列 { x[i] = 1;//x[i]的最小值為1; for(j = 0; j < i; j++)//迴圈i 次 { if(a[j] < a[i] && x[j] > x[i]-1) x[i] = x[j] + 1;//更新x[i]的值。 } } int max = 0; for(i = 0; i < n; i++) { if(max < x[i]) max = x[i]; } return max;//子數列的長度 } int main () { int n; cin>>n; int k = 0; int m[n] = {0}; char a[10000]; while(k < n) { cin>>a; m[k] = dizeng(a); k++; } for(int i = 0; i < n; i++) cout<<m[i]<<endl; return 0; }
