问题描述
小明发明了一种给由全大写字母组成的字符串编码的方法。
对于每一个大写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →26。
这样一个字符串就能被转化成一个数字序列:比如 ABCXYZ
→ 123242526
。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。
当然这样的还原有可能存在多个符合条件的字符串。
小明希望找出其中字典序最大的字符串。
输入格式
一个数字序列。
输出格式
一个只包含大写字母的字符串,代表答案
样例输入
123242526
样例输出
LCXYZ
数据范围
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
题解:
#include <iostream>
#include <cstring>
using namespace std;
const int N = 200010;
char op[27] = {'0',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
int main()
{
string s;
cin >> s;
string ans;
for (int i = 0; i < s.size(); i ++)
{
if(i + 1 < s.size())
{
int t = (s[i] - '0') * 10 + (s[i + 1] - '0');
if(t <= 26)
{
ans += op[t];
i ++;
}
else ans += op[s[i] - '0'];
}
else ans += op[s[i] - '0'];
}
cout << ans << endl;
return 0;
}