题目

时间限制

1s

空间限制

64MB

题目描述

瑞神今年大三了,他在寒假学会了英文的26个字母,所以他很兴奋!

于是他让他的朋友TT考考他,TT想到了一个考瑞神的好问题:给定一个字符串,从里面寻找 连续的26个大写字母 并输出!

但是转念一想,这样太便宜瑞神了,所以他加大了难度:现在给定一个字符串,字符串中包括26个大写字母和特殊字符’?’,特殊字符’?'可以代表任何一个大写字母。

现在TT问你是否存在一个 位置连续的且由26个大写字母组成的子串 ,在这个子串中每个字母出现且仅出现一次,如果存在,请输出从左侧算起的第一个出现的符合要求的子串,并且要求,如果有多组解同时符合位置最靠左,则输出字典序最小的那个解!如果不存在,输出-1!

这下HRZ蒙圈了,他刚学会26个字母,这对他来说太难了,所以他来求助你,请你帮他解决这个问题,报酬是可以帮你打守望先锋。

说明:字典序 先按照第一个字母,以 A、B、C……Z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,SIGH 和 SIGHT),那么把短者排在前。例如

AB??EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
ABDCEFGHIJKLMNOPQRSTUVWXYZ

上面两种填法,都可以构成26个字母,但是我们要求字典序最小,只能取前者。

注意,题目要求的是 第一个出现的, 字典序最小的 !

输入格式

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

输出格式

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

样例输入1

ABC??FGHIJK???OPQR?TUVWXY?

样例输出1

ABCDEFGHIJKLMNOPQRSTUVWXYZ

样例输入2

AABCDEFGHIJKLMNOPQRSTUVW??M

样例输出2

-1

思路

1、该题使用了滑动窗口的思想。
1、数组int abc[27]用于存储滑动窗口内是否有A ~ Z字母,分别对应下标0~25.
3、当窗口大小不足26时,将窗口右指针向右移一格,用abc数组判断新移进的字母是否在窗口中有重复,当有重复时将左指针移到重复的字母的下一个,并在移动过程中将遍历到的字母对应的abc置为-1。
4、当遇到?时,不做处理直接将右指针向右移
5、当窗口大小==26时跳出循环,输出l~r的内容,当遇到一个?时,遍历abc数组,将其赋为第一个遇到的值为-1对应的字母
6、当r移到字符串最右时跳出循环。此时若窗口长度不满26则输出-1,否则输出l~r的字符串。

错误

1、数组开为26大小,但在之后用while搜索时因为后面没再有-1所以会导致数组越界的问题。
2、string 和 string.h是两个完全不一样的头文件,string.h中为对char*处理的一些函数,属于C的代码,而string中包含对string数据类型处理的函数,当程序中使用string类型时一定要include < string > 这个头文件

代码

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
const int maxn=1e6+10;
string a;
int abc[27];
int main()
{cin>>a;int len=a.length(),count=0;memset(abc,-1,sizeof(abc));
//  cout<<len<<endl;    int l=0,r=0;while(r<len&&count<26){if(a[r]=='?'){r++;count++;           }else{int num=a[r]-'A';if(abc[num]==-1){abc[a[r]-'A']=r;r++;count++;        }else{while(a[l]!=a[r]){int num2=a[l]-'A';  abc[num2]=-1;count--;l++;            }abc[num]=r;l++;r++;}          }}if(count!=26)cout<<-1<<endl;else{int i=0;while(abc[i]!=-1)i++;for(l;l<r;l++){if(a[l]=='?'){char cha='A'+i;cout<<cha;i++;while(abc[i]!=-1)i++;}elsecout<<a[l];}cout<<endl;}return 0;
}

cspm2——T2 HRZ学英语相关推荐

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

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

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

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

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

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

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

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

  5. 【课程设计】基于C++的计算机辅助教学(CAI)软件开发:教学生学英语

    计算机辅助教学(CAI)软件开发:教学生学英语 一.课程设计目的 1.1 前言 1.2 需求分析 二.课程设计题目描述和要求 2.1 概要设计 2.2 程序设计组成框图 2.3 流程图 三.课程设计报 ...

  6. CSP3--T4咕咕东学英语

    题意: 咕咕东很聪明,但他最近不幸被来自宇宙的宇宙射线击中,遭到了降智打击,他的英语水平被归零了!这一切的始作俑者宇宙狗却毫不知情! 此时咕咕东碰到了一个好心人--TT,TT在吸猫之余教咕咕东学英语. ...

  7. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

  8. 程序员注意了:这个微信群可以学英语,而且全程免费

    不少同学问我,有没有免费学英语的地方. 不瞒大家,我还真知道. 今天分享的是一个微信群,群里面会有免费的英语课程,还有专业的英语老师辅导学习. 不过,这个微信群说是严格把控微信群学习质量,所以一个群限 ...

  9. 文末福利 | 只送给真正想学英语的你!

    打开电脑,我内心充满了紧张和期待,我又一次要特立独行的搞出点儿轰动大事情! 我打算邀请你和我一起"共谋大事","重金"邀请你: 花别人三分之一的时间学好英语 用 ...

  10. 宏基因组 微生物人注意了!这个微信群可以学英语,而且全程免费

    最近不少网友发现,在微信群里居然可以学英语!而且全程免费! 群里面会有免费的英语直播课,免费的课程资料,还有专业的英语老师辅导学习. 更重要的是,不需要集赞,转发,分享,就可以加入! 但是,群主要求免 ...

最新文章

  1. uniapp 鸿蒙,关于前端:uniapp项目安装运行操作手册
  2. nav 鼠标移入当前高亮显示,其他消失
  3. 关于js私钥加密公钥解密的问题
  4. SqlServer为字段创建索引
  5. python教程:深copy浅copy
  6. REST WebService与SOAP WebService的比较
  7. Hibernate or 的用法
  8. 第四课-Log的使用
  9. 005---基于UDP的套接字
  10. 【Java从0到架构师】MyBatis - 增删改、动态 SQL
  11. 为何你仍是一名社畜码农?
  12. 支付宝的授权回调目录只能配置一个域名吗_腾讯QQ授权登录(asp.net + angular)...
  13. 华为DHCP故障常用排查命令
  14. ApacheCN 数据科学译文集 20211109 更新
  15. 算法系列之十八:用天文方法计算二十四节气(下)
  16. 中职学校计算机基础的重要性,自学能力论文,关于浅淡培养中职学生计算机自学能力的重要性和方法相关参考文献资料-免费论文范文...
  17. 热更新总结--冷启动热更新
  18. 目标检测—安全帽检测实践
  19. 品商业模式[摘自xiewen网络业游戏规则]
  20. Kubernetes IPVS和IPTABLES

热门文章

  1. android手机碎片管理,安卓手机如何进行系统碎片整理
  2. 当“大数据”落地,当技术接轨商业
  3. 从零实现一个简单卷积神经网络
  4. scikit-learn KNN实现糖尿病预测
  5. STM32F4 ETR计数
  6. js 对象拼接的方法 数组 Map Set
  7. 海通股票交易接口查询当日成交c++源码分享
  8. Win10图片打不开文件系统错误2147416359解决方法
  9. itest手机考试有监控吗_itest机考说明
  10. NT1000无线测温系统 方维监测