时间限制1s,空间限制64MB

题目描述

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

AB??EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
ABDCEFGHIJKLMNOPQRSTUVWXYZ

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

Input

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

Output

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

Sample intput & output

Sample input1
ABC??FGHIJK???OPQR?TUVWXY?
Sample output1
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Sample input2
AABCDEFGHIJKLMNOPQRSTUVW??M
Sample output2
-1

数据范围

解题思路

类似于尺取的一种区间移动问题,就是如果当前[l,r][l,r][l,r]区间满足,则输出结果,如果不满足,则l++,r++l++,r++l++,r++。更多讲解见代码。

完整代码

//#pragma GCC optimize(2)//比赛禁止使用!
//#pragma G++ optimize(2)
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;int ch[100],l,r;
char zero[100];
string s;
bool check()//检查是否满足情况
{int temp=0;for (int i=0; i<26; i++){if(ch[i]>1) return false;//如果一个字符出现超过了1次,不满足else if(ch[i]==0) temp++;//没有出现的字符数量如果最终等于?的数量就满足}return temp==ch[26];
}
void print()
{int temp=0;for (int i=0; i<26; i++)if(ch[i]==0)zero[++temp]=char(i+'A');//将没有出现过的字符存进来,便于后面输出的时候是字典序最小的temp=0;for (int i=l; i<=r; i++){if(s[i]!='?') cout<<s[i];else cout<<zero[++temp];}cout<<endl;
}
int main()
{cin>>s;if(s.size()<26) { cout<<-1<<endl; return 0;}for (int i=0; i<26; i++)//预先处理前26个字符,ch[0-25]存'A'-'Z',ch[26]存'?'{if(s[i]!='?') ch[s[i]-'A']++;else ch[26]++;}l=0,r=25;while(r<s.size()){if(check()){ print(); return 0; }else {if(s[l]!='?') ch[s[l]-'A']--;//左端点右移前,将这个位置的字符去掉else ch[26]--;l++; r++;if(r<s.size()) {//右端点右移后,将新加入的字符计算入ch数组if(s[r]!='?') ch[s[r]-'A']++;else ch[26]++;}}}cout<<-1<<endl;return 0;
}

HRZ学英语(类似尺取)相关推荐

  1. 尺取--(毛毛虫算法)

    尺取算法也叫毛毛虫算法,因为计算过程有点类似毛毛虫一点点的往前挪,在挪动的过程中可以得到一些需要的解.(自动脑补) 通过两个变量来保存所选取区间的左右端点,然后不断的推进区间,寻找所需要的答案(尺取的 ...

  2. 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取

    https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ...

  3. POJ 3320 Jessica's Reading Problem (尺取)

    Description 给出一段长度为\(n\)的整数序列,求包含所有出现过的数的连续区间的最小长度. Input 第一行给出序列长度\(n\),第二行给出\(n\)个整数,表示这个序列.\(n \l ...

  4. 部分和问题 (dfs搜索 尺取)

    部分和问题 给定整数a1, a2, a3, a4,  ..........   ,  an  ,判断是否可以从中取出若干个数,使得他们的和恰好为k  . 1  <= n <= 20 测试数 ...

  5. Innumerable Ancestors 尺取 dfs序 lca

    给一棵树,m次查询,每次查询给两个集合,从这两个集合中分别选一个结点,使得这两个结点的lca的深度最大 考虑dfs序为3, 4, 5的三个结点,3和4的lca深度一定大于等于3和5的lca深度 所以可 ...

  6. Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)

    排序以后枚举尾部.尺取,头部单调,维护一下就好. 排序O(nlogn),枚举O(n) #include<bits/stdc++.h> using namespace std; typede ...

  7. AtCoder - arc098_b Xor Sum 2(尺取+位运算)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求 AlxorAl+1xor...xorAr=Al+Al+1+...+ArA_l\ xor\ A_{l+1}\ xor\ ...\ ...

  8. 牛客 - Alice and Bob(尺取+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...

  9. 牛客多校9 - Groundhog Looking Dowdy(尺取)

    题目链接:点击查看 题目大意:给出 n 天,每天可以有数件衣服可以选择,但每天只能选择一件衣服穿,每件衣服都有权值,现在需要挑出 m 天的衣服,使得最大值与最小值之差最小 题目分析:比赛时为了恰烂分用 ...

  10. CodeForces - 1358D The Best Vacation(前缀和+尺取)

    题目链接:点击查看 题目大意:给出 n 个数组成的数列,每个元素都可以展开为 1 , 2 , 3 .... a[ n ] ,现在将数列首尾相接,要求选取一段长度为 x 的连续数列,使得元素和最大 题目 ...

最新文章

  1. python加减法视频教程免费_一起学opencv-python三十八(视频分析:背景减法)
  2. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
  3. 解决dubbo-admin管控台不能显示服务的问题
  4. 计算机博士英语复试题目,博士复试自我介绍中英文双语解读
  5. linux测试固态硬盘读写速度,在 Linux 上检测 IDE/SATA SSD 硬盘的传输速度
  6. Bing每日壁纸API分享
  7. 深度学习自学(十五):人脸识别数据预处理方法
  8. vue-better-scroll引用报错[BScroll warn]: Can not resolve the wrapper DOM.
  9. SmartBi参数传值与JS报表宏及Mysql数据集特殊功能总结
  10. 运行vue项目遇到的bug
  11. c语言公历转农历程序,用c如何编写 农历转换成公历
  12. win10html网页运行空白,win10系统Ie浏览器无法打开HTML格式的网页文件的处理秒方...
  13. Python吴恩达深度学习作业15 -- YOLO原理及应用(自动驾驶——汽车检测)
  14. maven创建eclipse wtp项目
  15. antv/G6使用详细介绍,一篇文章说清antv G6如何使用
  16. 计算机显卡的性能参数,关于电脑显卡的技术参数与性能的关系
  17. Pta题目集:汽车加油问题 (20 分)
  18. 少儿机器人教育在国内的情况
  19. Android 高仿微信实时聊天 基于百度云推送
  20. R语言编写自定义函数计算分类模型评估指标:准确度、特异度、敏感度、PPV、NPV、数据数据为模型预测后的混淆矩阵、比较多个分类模型分类性能(逻辑回归、决策树、随机森林、支持向量机)

热门文章

  1. androidkiller
  2. python语言开发什么_python语言是什么语言开发的_Python语言的由来,编程语言简史...
  3. 企业微信会员运营 打破传统营销方式开启全渠道会员营销新模式
  4. 移动vue大转盘抽奖
  5. JSON字符串中带有反斜杠
  6. 基于FPGA的ADS1256讲解
  7. 第九章:iOS应用的界面编辑
  8. 用Matplotlib画两张花里胡哨的图
  9. 高德地图API 前端调用 搜索定位
  10. Java汉字转拼音(简繁体转换)库之JPinYin