HRZ学英语(类似尺取)
时间限制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学英语(类似尺取)相关推荐
- 尺取--(毛毛虫算法)
尺取算法也叫毛毛虫算法,因为计算过程有点类似毛毛虫一点点的往前挪,在挪动的过程中可以得到一些需要的解.(自动脑补) 通过两个变量来保存所选取区间的左右端点,然后不断的推进区间,寻找所需要的答案(尺取的 ...
- 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取
https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ...
- POJ 3320 Jessica's Reading Problem (尺取)
Description 给出一段长度为\(n\)的整数序列,求包含所有出现过的数的连续区间的最小长度. Input 第一行给出序列长度\(n\),第二行给出\(n\)个整数,表示这个序列.\(n \l ...
- 部分和问题 (dfs搜索 尺取)
部分和问题 给定整数a1, a2, a3, a4, .......... , an ,判断是否可以从中取出若干个数,使得他们的和恰好为k . 1 <= n <= 20 测试数 ...
- Innumerable Ancestors 尺取 dfs序 lca
给一棵树,m次查询,每次查询给两个集合,从这两个集合中分别选一个结点,使得这两个结点的lca的深度最大 考虑dfs序为3, 4, 5的三个结点,3和4的lca深度一定大于等于3和5的lca深度 所以可 ...
- Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)
排序以后枚举尾部.尺取,头部单调,维护一下就好. 排序O(nlogn),枚举O(n) #include<bits/stdc++.h> using namespace std; typede ...
- AtCoder - arc098_b Xor Sum 2(尺取+位运算)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求 AlxorAl+1xor...xorAr=Al+Al+1+...+ArA_l\ xor\ A_{l+1}\ xor\ ...\ ...
- 牛客 - Alice and Bob(尺取+二分)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...
- 牛客多校9 - Groundhog Looking Dowdy(尺取)
题目链接:点击查看 题目大意:给出 n 天,每天可以有数件衣服可以选择,但每天只能选择一件衣服穿,每件衣服都有权值,现在需要挑出 m 天的衣服,使得最大值与最小值之差最小 题目分析:比赛时为了恰烂分用 ...
- CodeForces - 1358D The Best Vacation(前缀和+尺取)
题目链接:点击查看 题目大意:给出 n 个数组成的数列,每个元素都可以展开为 1 , 2 , 3 .... a[ n ] ,现在将数列首尾相接,要求选取一段长度为 x 的连续数列,使得元素和最大 题目 ...
最新文章
- python加减法视频教程免费_一起学opencv-python三十八(视频分析:背景减法)
- springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
- 解决dubbo-admin管控台不能显示服务的问题
- 计算机博士英语复试题目,博士复试自我介绍中英文双语解读
- linux测试固态硬盘读写速度,在 Linux 上检测 IDE/SATA SSD 硬盘的传输速度
- Bing每日壁纸API分享
- 深度学习自学(十五):人脸识别数据预处理方法
- vue-better-scroll引用报错[BScroll warn]: Can not resolve the wrapper DOM.
- SmartBi参数传值与JS报表宏及Mysql数据集特殊功能总结
- 运行vue项目遇到的bug
- c语言公历转农历程序,用c如何编写 农历转换成公历
- win10html网页运行空白,win10系统Ie浏览器无法打开HTML格式的网页文件的处理秒方...
- Python吴恩达深度学习作业15 -- YOLO原理及应用(自动驾驶——汽车检测)
- maven创建eclipse wtp项目
- antv/G6使用详细介绍,一篇文章说清antv G6如何使用
- 计算机显卡的性能参数,关于电脑显卡的技术参数与性能的关系
- Pta题目集:汽车加油问题 (20 分)
- 少儿机器人教育在国内的情况
- Android 高仿微信实时聊天 基于百度云推送
- R语言编写自定义函数计算分类模型评估指标:准确度、特异度、敏感度、PPV、NPV、数据数据为模型预测后的混淆矩阵、比较多个分类模型分类性能(逻辑回归、决策树、随机森林、支持向量机)