博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外星人的密码数字
阅读量:7068 次
发布时间:2019-06-28

本文共 1064 字,大约阅读时间需要 3 分钟。

【题目描述】

XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车)。因为是最长不降子序列,所以数字中没有0,也就是说外星人的数字是>=1的数字。
【输入格式】
第一行一个含有26个小写字母的字符串,保证不重复
第二行一个长度<=255的字符串表示英文单词,用空格隔开
【输出格式】
外星人所说的数字
【样例输入】
abcdefghijklmnopqrstuvwxyz
abcd efg hhh ihg
【样例输出】
4331
【样例解释】
由第一个字符串得a=1,b=2,c=3,d=4,…,z=26
单词abcd即1234,最长不下降子序列长度为4
单词efg即567,最长不下降子序列长度为3
单词hhh即888,最长不下降子序列长度为3
单词ihg即987,最长不下降子序列长度为1
【分析】
动态规划+字符串处理,可以轻松过掉。

var  a:array[1..1000]of longint;  lis:array[1..1000]of longint;  number:array['a'..'z']of longint;  i,j,n,ans:longint;  st,ss:string;begin  readln(st);  for i:=1 to 26 do number[st[i]]:=i;  readln(st);  st:=st+' ';  repeat    ss:=copy(st,1,pos(' ',st));    delete(st,1,pos(' ',st));    n:=length(ss);    for i:=1 to n do a[i]:=number[ss[i]];    for i:=1 to n do lis[i]:=1;    for i:=2 to n do      for j:=1 to i-1 do        if (a[j]<=a[i])and(lis[j]+1>lis[i]) then lis[i]:=lis[j]+1;    ans:=0;    for i:=1 to n do      if ans

转载于:https://www.cnblogs.com/JRX2015U43/p/6533519.html

你可能感兴趣的文章
gearman简单介绍
查看>>
《Typecript 入门教程》 3、接口
查看>>
jsp的几种跳转比较
查看>>
用oracle查询当前数据库中的所有表
查看>>
决心书
查看>>
git 从版本控制中删除文件及.gitignore的用法
查看>>
cacti安装
查看>>
Spark核心概念
查看>>
Kali***(二)之被动信息收集——搜索引擎
查看>>
组策略参考文档1-共享打印机
查看>>
Linux的包管理工具介绍
查看>>
程序员如何成为架构师
查看>>
fiddler抓包之关于connect连接
查看>>
MySQL,binlog2sql回滚操作测试
查看>>
CentOS7下yum安装Jenkins
查看>>
简练软考知识点整理-确认范围管理
查看>>
不懂这几点就落后了:Android、Python工程师必读!
查看>>
Werkzeug 教程
查看>>
内核参数优化
查看>>
用户,组和权限零碎知识
查看>>