#include<stdio.h> #include<string.h> #define N 10001 #define MAX(m,n) ((m)>(n)?(m):(n)) char a[N],b[N]; int d[N][N]; int cmp(const void *a,const void *b) { return *(char *)a-*(char *)b; } int My_Cancel(int len)/*删除相邻的同样数据,不相邻的并不删除,即aabbab,输出abab不是 ab,成为单调递增,否则成为单调不减序列**/ { int i,j=0; for(i=0;i<len;i++) { if(a[i+1]==a[i]) continue; else { a[j+1]=a[i+1]; j++; } } return j; } int LISL(int len) { int i,j; for(i=1;i<=len;i++) d[i][0]=0; for(j=1;j<=len;j++) d[0][j]=0; for(i=1;i<=len;i++) for(j=1;j<=len;j++) if(a[i-1]==b[j-1]) d[i][j]=d[i-1][j-1]+1; else d[i][j]=MAX(d[i][j-1],d[i-1][j]); return d[len][len]; } int main() { int T,len1,len2;int i,j; scanf("%d%*c",&T); while(T--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(d,0,sizeof(d)); scanf("%s%*c",a); len1=strlen(a); len2=My_Cancel(len1); memcpy(b,a,sizeof(a)); qsort(b,len2,sizeof(char),cmp); printf("%d\n",LISL(len2)); } return 0; }