题目

瑞神今年大三了,他在寒假学会了英文的26个字母,所以他很兴奋!
于是他让他的朋友TT考考他,TT想到了一个考瑞神的好问题:给定一个字符串,从里面寻找 连续的26个大写字母 并输出!
但是转念一想,这样太便宜瑞神了,所以他加大了难度:现在给定一个字符串,字符串中包括26个大写字母和特殊字符’?’,特殊字符’?'可以代表任何一个大写字母。
现在TT问你是否存在一个 位置连续的且由26个大写字母组成的子串 ,在这个子串中每个字母出现且仅出现一次,如果存在,请输出从左侧算起的第一个出现的符合要求的子串,并且要求,如果有多组解同时符合位置最靠左,则输出字典序最小的那个解!如果不存在,输出-1!
这下HRZ蒙圈了,他刚学会26个字母,这对他来说太难了,所以他来求助你,请你帮他解决这个问题,报酬是可以帮你打守望先锋。
说明:字典序 先按照第一个字母,以 A、B、C……Z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,SIGH 和 SIGHT),那么把短者排在前。例如

AB??EFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABDCEFGHIJKLMNOPQRSTUVWXYZ

上面两种填法,都可以构成26个字母,但是我们要求字典序最小,只能取前者。
注意,题目要求的是 第一个出现的, 字典序最小的 !

Input
输入只有一行,一个符合题目描述的字符串。

Output
输出只有一行,如果存在这样的子串,请输出,否则输出-1

Sample input1
ABC??FGHIJK???OPQR?TUVWXY?

Sample output1
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Sample input2
AABCDEFGHIJKLMNOPQRSTUVW??M

Sample output2
-1

思路

设输入的字符串为str。
建立一个数组visit[26]。若visit[i]=true,则说明第i个字母存在。

for (Left从0遍历到str.length - 26) {memset(visit, false, sizeof(visit));Right = Left + 26;for (k从Left到Right遍历) {if (visit[str[k] - 'A']) 说明str[Left]到str[Right]存在同一个字母出现了两次及以上的情况,str[Left]到str[Right]不符合要求;else if (str[k] >= 'A' && str[k] <= 'Z') visit[str[k] - 'A'] = true;}if (不符合要求) continue;for (i从Left到Right遍历) {if (str[i] == '?') str[i] = 最小的visit == false的字母;}输出str;
}

代码

#include <iostream>
#include <cstring>using namespace std;string str;
bool visit[26]; //visit[0]使用,代表'A'
bool solve;int Left, Right;
int cnt;void print()
{for (int i = 0; i < 26; i++)if (visit[i]) {char c = 'A' + i;cout << c << " ";}cout << endl;
}int find()
{for (int i = Left; i < Right; i++)if (str[i] == '?') return i;return -1;
}int main()
{cin >> str;Left = 0;Right = 25;for (Left = 0; Left < str.length() - 25; Left++) {memset(visit, false, sizeof(visit));solve = true;Right = Left + 26;for (int k = Left; k < Right; k++) {if (visit[str[k] - 'A']) solve = false;else if (str[k] >= 'A' && str[k] <= 'Z') visit[str[k] - 'A'] = true;}//cout << "1" << endl;if (!solve) continue;//cout << "Left: " << Left << " " << "Right: " << Right << endl;//print();for (int i = Left; i < Right; i++) {if (!visit[i - Left]) {char c = 'A' + i - Left;int in = find();//cout << in << endl;str[in] = c;}}//cout << "2" << endl;for (int i = Left; i < Right; i++)cout << str[i];cout << endl;return 0;}cout << "-1" << endl;return 0;
}

程序设计思维(CSP模拟题)B - HRZ 学英语相关推荐

  1. 程序设计思维月模拟题2-CSP201609-3 炉石传说

    以我开卡包的水平这游戏只能叫炉石稀有 问题描述 本题所使用的炉石传说游戏的简化规则如下: * 玩家会控制一些角色,每个角色有自己的生命值和攻击力.当生命值小于等于 0 时,该角色死亡.角色分为英雄和随 ...

  2. c语言程序二级模拟试卷,C语言程序设计二级考试模拟题集.doc

    C语言程序设计二级考试模拟题集 (6套试题) 全国高校联合计算机等级考试广西考区 非计算机专业学生计算机水平考试(二级C语言)模拟试卷1 (本试卷包括第一卷和第二卷,答卷时间总共120分钟) 第一卷 ...

  3. 2016小码哥杯java程序设计竞赛赛前模拟题

    java程序设计赛前模拟题 一.单选题:(45分) 15题单选题,每题3分 第1题 单项选择题     代码片段: System.out.format("Pi is approximatel ...

  4. csp模拟题-炉石传说

    题目 试题编号: 201609-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述: <炉石传说:魔兽英雄传>(Hearthstone: Heroes o ...

  5. c语言运行后出现xt073,2017年北京工业大学城市交通学院894C语言与数据结构之C程序设计考研强化模拟题...

    一.选择题 1. 若变量已正确定义为int 型,要通过语句 □代表一个空格符)给a 赋值1.给b 赋值2.给c 赋值3, 以下输入形式中错误的是(注:( ). A. B. C. D. [答案]D [解 ...

  6. c语言p832.c的答案,2017年北方民族大学计算机系统结构832C语言程序设计与数据结构之C程序设计考研仿真模拟题...

    一.选择题 1. 有以下程序: 程序运行后的输出结果是( ). A. B. C. D. [答案]D while 函数判断p 指针指向地址的内容是否和a 指针指向地址的内容相等,[解析]如果不是,则移动 ...

  7. 湖北大学829数据库原理与c语言程序设计,2017年湖北大学教育学院829数据库原理与C语言程序设计考研强化模拟题...

    一.选择题 1. 关于分布式数据库,下列说法错误的是( ). A. 在分布式数据库系统中,分片透明性主要是指数据分片的分配位置对用户是透明的,用户无需关注每个分片被分配的场地 B. 对于用户而言,一个 ...

  8. 航空航天大事件c语言程序设计,2017年沈阳航空航天大学航空航天工程学部823C语言程序设计考研强化模拟题...

    一.选择题 1. 有以下程序: 以上程序执行后abc. dat文件的内容是( ). A.China B.Chinang C.ChinaBeijing D.BeijingChina [答案]B [解析] ...

  9. 河北师范大学C语言试题,2017年河北师范大学信息技术学院838C语言程序设计考研强化模拟题...

    作为字符串结束标识. 所以字符数组的长度并不是字符串的长度,系统字符串"1234567\0\0"与"1234567" 等效,所以字符 [解析]本题考点为&quo ...

最新文章

  1. 揭开「拓扑排序」的神秘面纱
  2. Linux开发环境搭建一 ubuntu安装ssh
  3. HTML5 的知识分享(二):HTML5 的常用标签
  4. Spring Boot的快速入门
  5. Struts2中的值栈
  6. SpykeTorch: Efficient Simulation of Convolutional Spiking Neural Networks With at Most One Spike per
  7. 基本飞行模式中英文对照
  8. JAVA线程1 - 基本概念
  9. Postman 设置token为全局变量
  10. win7安装Python所需资源
  11. 千月双端影视APP源码
  12. mysql的安装配置
  13. git push时提示邮箱格式不正确
  14. 8款精致的纯CSS3按钮特效
  15. python练习之CheckiO-HOME小岛
  16. HTML期末学生大作业-班级校园我的校园网页设计与实现html+css+javascript
  17. ML之interpret:基于titanic泰坦尼克是否获救二分类预测数据集利用interpret实现EBC模型可解释性之全局解释/局部解释案例
  18. EAST: An Efficient and Accurate Scene Text Detector 论文阅读
  19. 计算机组成原理八位全加器,计算机组成原理实验报告-八位补码加减法器的设计与实现.docx...
  20. 前端中关于下载文件问题

热门文章

  1. 软件设计师——计算机网络概述
  2. Unity 忍者跑酷
  3. 无法加载服务器指定地图,用javascript调用iserver服务器上的地图不显示
  4. angular使用crypto.js加密
  5. 股权受让人承担出资等责任后,能否向转让人追偿
  6. 【无人机路径规划】基于深度强化学习的多无人机辅助边缘计算网络路径规划(Matlab代码实现)
  7. 用Pdg2.DLL解码PDG的境界
  8. java预分配 磁盘_java – 为文件存储预分配驱动器空间
  9. matlab 交流传动,交流传动系统高性能控制及MATLAB/SIMULINK建模 PDF
  10. 使用Pandas画波士顿矩阵