计蒜客 难题题库 223 字母排序

 XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车)。   (因为是最长不降子序列,所以数字中没有0,也就是说外星人的数字是> =1的数字)

例如

我们正常的字母排列顺序是abcdefg…….xyz,代表a< b< c< …..< x< y< z abcd  efg  hhh  ihg四个字符串的最长不降子序列的长度分别为4  3  3  1

输入格式:

第1,2行为字符串 含义如题描述

输出格式:

输出答案 含义如题描述

1< =第二行长度< =255

样例1

输入:

abcdefghijklmnopqrstuvwxyz
abcd efg hhh ihg

输出:

4331



#include
#include
using namespace std;

const int maxn = 100000;
int order[26];
int dp[maxn];

int main(){
    string s;
    cin >> s;
    int n = s.length();
    int i, j;
    for(i = 0; i < n; ++i){
        order[s[i] - 'a'] = i;
    }
    int temp, res;
    while(cin >> s){
        n = s.length();
        res = 0;
        for(i = 0; i < n; ++i){
            dp[i] = 1;
            for(j = 0; j < i; ++j){
                if(order[s[j] - 'a'] <= order[s[i] - 'a'] && (temp = dp[j] + 1) > dp[i]){
                    dp[i] = temp;
                }
            }
            res = max(res, dp[i]);
        }
        cout << res;
    }
    cout << endl;
}


你可能感兴趣的:(计蒜客)