最长递增子序列模板

来源:互联网 发布:mac 小红点 编辑:程序博客网 时间:2024/04/30 10:18
#include<stdio.h>#include<iostream>#define N 100using namespace std;int main(void){    //存储原字符串    char str[N];    //b[j]存储以j为长度的递增子序列的结尾元素    char b[N];    int cases;    cout<<"请输入案例个数:"<<endl;    cin>>cases;    while(cases--)    {        cout<<"请输入字符串:"<<endl;        cin>>str;        //初始化各变量        int i;        int length = strlen(str);        b[0] = '0'; //b[0]为最小,假设输入的字符全部是字母        b[1] = str[0];//以1为长度的递增子序列的结尾元素都是str[0]        int first,mid,end;//分别为二分查找的首,中,尾位置        int maxLen = 1; //为目前递增子序列最大长度        for(i=1;i<length;i++)        {            first = 0, end = maxLen;            while(first<=end)            {                mid = (first+end)/2;                if(b[mid]<str[i])                    first = mid +1;                else                    end = mid -1;            }            b[first] = str[i];            if(first>maxLen) maxLen++;        }        cout<<"最长递增子序列的长度为:"<<maxLen<<endl;        cout<<"最长递增子序列为:"<<endl;        for(i=1;i<=maxLen;i++)            cout<<b[i];        cout<<endl;    }    return 0;}

0 0