文章目录

  • 题目描述
  • 样例
  • 思路
  • 代码

题目描述

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

AB??EFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABDCEFGHIJKLMNOPQRSTUVWXY

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

样例

Input

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

Output

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

样例输入1

ABC??FGHIJK???OPQR?TUVWXY?

样例输出1

ABCDEFGHIJKLMNOPQRSTUVWXYZ

样例输入2

AABCDEFGHIJKLMNOPQRSTUVW??M

样例输出2

-1

思路

首先一串字符串在判断时应该是26个一组进行判断的
①对于长度小于26的字符串,必然不满足条件
②对于长度为26的字符串,遍历字符串,使用数组记录每个字符出现的次数和“?”出现的次数,遍历数组,如果每个字母都没有重复(出现次数<=1)并且“?”出现的次数恰好等于出现次数为0的字母的个数,那么此时满足条件
③如果长度大于26,我们要选取最靠左的并且满足条件的子字符串,从第一个字母开始,向后遍历26个字母,并进行②判断,如果满足条件,则选取这一段,如果不满足条件,后移一个字母继续进行③判断,直至出现符合条件的字符串或者遍历结束

对于输出满足条件的字符串:另设一数组,在遍历记录字母出现次数的数组时,依次将次数为0的字母记录到新数组中,在输出时,遇到“?”就依次按顺序输出该数组中记录的字母

代码

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;int main()
{string s;cin>>s;
//  cout<<int(s[0]);int sum1[26]={0};int sum2[26]={0};int n=s.size();int num=0;//用来统计?数量 for(int i=0;i<n;i++){if(s[i]!='?'){sum1[int(s[i])-65]++;}else num++; }if(n==26)//123数据点 {int index=0;int a[26]; int k=0,p=0;for(int i=0;i<n;i++){if(sum1[i]>=2){index=1;//重复不符合要求 } else if(sum1[i]==0){num--;a[k]=i+65;k++;}  }if(index==0&&num==0)//不重复且缺失的字母能用?补上 {for(int i=0;i<n;i++){if(s[i]!='?')cout<<s[i];else{cout<<char(a[p]);p++;}}}else cout<<"-1"<<endl; }else{int flag=n;int p=0;int a[26];//用来记录那些字母没有 for(int i=0;i<n-24;i++){int sum2[26];memset(sum2,0,sizeof(sum2));int num2=0;// int a[26];memset(a,0,sizeof(a));int q=0;//统计各个字母的出现次数 for(int j=i;j<i+26;j++){if(s[j]!='?')sum2[int(s[j])-65]++;else{num2++;//问号数++ }  }int index=0;for(int k=0;k<26;k++){if(sum2[k]>=2){index=1;}else if(sum2[k]==0){num2--;a[q]=k+65;q++;}}if(index==0&&num2==0){flag=i;break;}}if(flag!=n){for(int i=flag;i<flag+26;i++){if(s[i]!='?')cout<<s[i];else{cout<<char(a[p]);p++;} }cout<<endl;}else cout<<"-1"<<endl;        }
}

Week 8 CSP M2 HRZ学英语相关推荐

  1. 程序设计思维(CSP模拟题)B - HRZ 学英语

    题目 瑞神今年大三了,他在寒假学会了英文的26个字母,所以他很兴奋! 于是他让他的朋友TT考考他,TT想到了一个考瑞神的好问题:给定一个字符串,从里面寻找 连续的26个大写字母 并输出! 但是转念一想 ...

  2. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

  3. 程序设计思维与实践 CSP-M2 (3/4/数据班)

    HRZ的序列 题意: 相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣. 他好奇是否存在一个数K,使得一些数加上K,一些数减去K,一 ...

  4. 程序设计思维与实践 CSP-M2

    HRZ的序列 相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣,他好奇是否存在一个数K,使得一些数加上K,一些数减去K,一些数不变, ...

  5. CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)

    CSP 201409-5 拼图问题 一.题目信息 第一次写博客,有什么疏漏之处,欢迎各位大佬指出<(* ̄▽ ̄*)/ 题目要求 试题编号 201409-5 试题名称 拼图 时间限制 3.0s 试题 ...

  6. 运动想象| EEG信号、共空间模式算法(CSP)

    摘要 作为一种特殊的人机交互模式,脑-机接口(brain-computer interface, BCI)技术成为了当前信息交互的研究热点.其中脑电信号(electroencephalography, ...

  7. CSP(共空间模式)的python实现

    数据来源(bbci竞赛数据graz两分类) 链接:https://pan.baidu.com/s/1GVPp2UBDiIUng6PlVU23uw 提取码:7jal 代码 def csp_yx(EEGS ...

  8. CSP 历年第一二题汇总

    早年大部分使用java写的,提交是需要将public class xx {}改为 public class main{},否则编译无法通过. 目前全部的前两题都已经解答完毕,出了202012月份的第二 ...

  9. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  10. Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制

    文章目录 前言 CSP 特点 CSP代码 演示 1. 正常流程的代码 2. CSP 未设置buffer 代码 3. 设置指定大小的channel buffer 总结 前言 CSP 这个名词大家会比较陌 ...

最新文章

  1. python与excel做数据可视化-python数据可视化怎么做?excel可视化图表制作?
  2. SVM支持向量机——核函数、软间隔
  3. 罕见!百度、微博、拼多多、B站等全国34家互联网巨头集体表态
  4. C# 的未来:主构造函数
  5. hashmap另一种初始化
  6. (求解答)phpcms报错:【DNS解析“不支持采集和报错远程图片”】
  7. Python中 模块、包、库
  8. 图像处理笔记(十七):再看傅里叶变换
  9. 俄文化部长称Netflix是美国文化侵掠的工具,将占领每台电视机
  10. 中专计算机应用基础知识点归纳,《计算机应用基础》各章知识点归纳大全
  11. ASCII码对照表(Python代码实现打印,python-docx库/xlwt库/fpdf库)
  12. C语言 输出螺旋数组
  13. 领峰:普通人如何炒白银技巧和方法有哪些
  14. linux 内核 谁在维护,[转载]Linux 内核维护者封杀明尼苏达大学
  15. CAN总线简易入门教程
  16. 新版本(2019后)intell idea怎么恢复默认设置
  17. 写给女儿青春生日的信(转载)
  18. RoboCupRescue心得
  19. [当人工智能遇上安全] 5.基于机器学习算法的主机恶意代码识别研究
  20. 如何把极点五笔卸载干净

热门文章

  1. 切换无线网卡失败服务器提示,电脑无线网卡切换为AP模式时提示ICS启动失败的解决方法...
  2. 系统架构设计方法论——IBM架构解决方案设计
  3. 别把职场当官斗,聪明人都在自我成长
  4. html图片绝对地址相对地址,HTML中background的图片地址是相对地址吗?
  5. android播放3gp格式,Android – 无法播放任何视频(mp4 / mov / 3gp /等)?
  6. 力扣刷题 DAY_72 回溯
  7. 以计算机作为类 触摸板作为接口,怎样用Arduinopromicro将电脑触控板转换为USB设备...
  8. Vulkan 基本原理
  9. 一块硬盘的爱情故事,好揪心
  10. 《SteamVR2.2.0交互系统(Interaction System)》(Yanlz+Unity+XR+VR+AR+MR+Valve+Teleport+Skeleton+立钻哥哥++ok++)