B. Complete the Word (尺取法)
题目链接:http://codeforces.com/problemset/problem/716/B
题目大意:字符串中的 '?' 可以用A->Z任何一个来替换 问能不能通过替换使字符串有一个连续的A->Z的子序列 可以就输出 不可以就输出-1
思路:
这道题和 Leetcode 1004 很像,不同的就是这里的?都可以替换掉
同样还是考虑尺取法。 让第一个指针i 从0开始往后走(因为要确保有26个序列,所以i到len-26必须停止。因为如果再往后走肯定就没有26个了,没必要去查找)
第二个指针j从i开始往后走26个就可以了
AC代码:
1 #include <cstdio> 2 #include <string> 3 #include <iostream> 4 #include <algorithm> 5 #include <cstdbool> 6 #include <string.h> 7 #include <math.h> 8 9 10 using namespace std; 11 12 char s[1000005]; 13 int vis[30]; 14 15 int main() 16 { 17 while (cin >> s) 18 { 19 bool flag = true; 20 int len = strlen(s); 21 if (len < 26) { 22 printf("-1\n"); 23 continue; 24 } 25 for (int i = 0; i <= len - 26 && flag; i++) 26 { 27 int cnt1 = 0,cnt2 = 0; 28 memset(vis,0, sizeof(vis)); 29 for (int j=i;j<i+26;j++) 30 { 31 if (s[j]>='A' && s[j]<='Z') 32 { 33 vis[s[j]-'A']++; 34 } 35 else 36 cnt2++; //问号数目 37 } 38 for (int j=0;j<26;j++) 39 { 40 if (vis[j]==1) 41 cnt1++; 42 } 43 if (cnt1 + cnt2 == 26) 44 { 45 int t = 0; 46 for (int j=i;j<i+26;j++) 47 { 48 if (s[j] == '?') 49 { 50 for (;t<26;t++) 51 { 52 if (vis[t] == 0) 53 { 54 s[j] = 'A' + t; 55 t++; 56 break; 57 } 58 } 59 } 60 } 61 flag = false; 62 } 63 } 64 for (int i=0;i<len;i++) 65 { 66 if (s[i] == '?') 67 { 68 s[i] = 'A'; 69 } 70 } 71 if (flag) 72 printf("-1\n"); 73 else 74 cout << s << endl; 75 76 } 77 }
转载于:https://www.cnblogs.com/-Ackerman/p/11168638.html
B. Complete the Word (尺取法)相关推荐
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
#1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...
- CF660C Hard Process(尺取法)
整理的算法模板合集: ACM模板 尺取法 题目中要我们求最多改变k次后连续的1的最长长度.那么转换一下,不就是求至多包含k个0的子串的最长长度吗? 直接套用尺取法的思想,维护两端点,一旦0的个数超过k ...
- 【常用技巧精选】尺取法
整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...
- ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总
目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...
- 尺取法 POJ 3601 Subsequence
题目传送门 1 /* 2 题意:求连续子序列的和不小于s的长度的最小值 3 尺取法:对数组保存一组下标(起点,终点),使用两端点得到答案 4 1. 记录前i项的总和,求[i, p)长度的最小值,用二分 ...
- poj2739(尺取法+质数筛)
题意:给你一个数,问这个数能否等于一系列连续的质数的和: 解题思路:质数筛打出质数表:然后就是尺取法解决: 代码: #include<iostream> #include<algor ...
- 尺取法 || emmmm
给定两个上升的数组,一个数组任取一个数,求两个数差的min 尺取法emm 也不知道对不对 #include <stdio.h> #include <stdlib.h> #def ...
- POJ 3320 尺取法,Hash,map标记
1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...
- poj_2739 尺取法
题目大意 给定一个数字N,N可能由1个或多个连续的素数求和得到,比如41 = 2+3+5+7+11+13, 41 = 11+13+17, 41 = 41.求出对于N,所有可能的组合形式. 题目分析 先 ...
最新文章
- “双轮驱动”突破瓶颈,智源研究院发布“自然语言处理”重大研究方向,携手京东打造联合实验室...
- FreeBSD下安装配置Hadoop集群(三)
- unix amp; linux oralce用户 内存使用情况分析
- mysql 错误1136_mysql,_MySQL错误:Error Code: 1136,mysql - phpStudy
- python概率随机抽奖_Python利用带权重随机数解决抽奖和游戏爆装备
- Python学习之路,第二次复习:列表,元组
- md5模式 签名_MD的完整形式是什么?
- 前端学习(2306):react之组件使用之图片使用
- java连接u盘_虚拟机VM6.0 LINUX redhat 挂接U盘,访问U盘
- IT公司比较流行的10种编程语言
- “当了十年IT程序员,我转型做自动驾驶开发的这五年”
- 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
- [控件] 将字符串转换成贝塞尔曲线并执行动画
- 设置宽度 seaborn barplot_Seaborn入门:详解barplot和countplot
- C语言哈希表uthash的使用方法详解(附下载链接)
- python xlwt_python中使用 xlwt 操作excel的常见方法与问题
- win10计算机删除了怎么恢复,win10文件误删除怎么恢复-互盾数据恢复软件
- CNTV的点播调度方式
- linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
- 最多显示三行,多余...展开,点击展开收起 getClientRects
热门文章
- 多层陶瓷电容器用处_【科普】片状多层陶瓷电容器的封装方法,你了解吗?
- java多个按钮监听,如何改成监听多个按钮啊用e.getsource()
- crf java实现_Tensorflow实现crf损失
- php查看文件属性,文件目录属性及权限
- oracle 查看日志组切换状态_Oracle 逻辑结构篇 之 重做日志和归档日志管理(一)...
- 计算机临床医学自动化哪个好,大学专业难度排行前十名,临床医学位列第二
- linux主从服务器不能同步,Linux下redis的持久化、主从同步与哨兵详解
- 【Centos 8】【Centos 7】安装 docker
- jvm学习笔记(三)
- xmind快捷键_XMind思维导图软件最全面的使用教程!