题目链接: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 (尺取法)相关推荐

  1. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)

    #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...

  2. CF660C Hard Process(尺取法)

    整理的算法模板合集: ACM模板 尺取法 题目中要我们求最多改变k次后连续的1的最长长度.那么转换一下,不就是求至多包含k个0的子串的最长长度吗? 直接套用尺取法的思想,维护两端点,一旦0的个数超过k ...

  3. 【常用技巧精选】尺取法

    整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...

  4. ACM—各种模拟 总结(字符串,尺取法,数学问题)习题汇总

    目录 一.字符串模拟 二. 高精度计算 1. 回文数(高精度,进制转换) 三.数学问题模拟 四.尺取法(双指针法) 1.都说小镇的切糕贵 (尺取法,字符串) umi和弓道 五.奇怪的模拟 x的位数=l ...

  5. 尺取法 POJ 3601 Subsequence

    题目传送门 1 /* 2 题意:求连续子序列的和不小于s的长度的最小值 3 尺取法:对数组保存一组下标(起点,终点),使用两端点得到答案 4 1. 记录前i项的总和,求[i, p)长度的最小值,用二分 ...

  6. poj2739(尺取法+质数筛)

    题意:给你一个数,问这个数能否等于一系列连续的质数的和: 解题思路:质数筛打出质数表:然后就是尺取法解决: 代码: #include<iostream> #include<algor ...

  7. 尺取法 || emmmm

    给定两个上升的数组,一个数组任取一个数,求两个数差的min 尺取法emm 也不知道对不对 #include <stdio.h> #include <stdlib.h> #def ...

  8. POJ 3320 尺取法,Hash,map标记

    1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...

  9. poj_2739 尺取法

    题目大意 给定一个数字N,N可能由1个或多个连续的素数求和得到,比如41 = 2+3+5+7+11+13, 41 = 11+13+17, 41 = 41.求出对于N,所有可能的组合形式. 题目分析 先 ...

最新文章

  1. “双轮驱动”突破瓶颈,智源研究院发布“自然语言处理”重大研究方向,携手京东打造联合实验室...
  2. FreeBSD下安装配置Hadoop集群(三)
  3. unix amp; linux oralce用户 内存使用情况分析
  4. mysql 错误1136_mysql,_MySQL错误:Error Code: 1136,mysql - phpStudy
  5. python概率随机抽奖_Python利用带权重随机数解决抽奖和游戏爆装备
  6. Python学习之路,第二次复习:列表,元组
  7. md5模式 签名_MD的完整形式是什么?
  8. 前端学习(2306):react之组件使用之图片使用
  9. java连接u盘_虚拟机VM6.0 LINUX redhat 挂接U盘,访问U盘
  10. IT公司比较流行的10种编程语言
  11. “当了十年IT程序员,我转型做自动驾驶开发的这五年”
  12. 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
  13. [控件] 将字符串转换成贝塞尔曲线并执行动画
  14. 设置宽度 seaborn barplot_Seaborn入门:详解barplot和countplot
  15. C语言哈希表uthash的使用方法详解(附下载链接)
  16. python xlwt_python中使用 xlwt 操作excel的常见方法与问题
  17. win10计算机删除了怎么恢复,win10文件误删除怎么恢复-互盾数据恢复软件
  18. CNTV的点播调度方式
  19. linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
  20. 最多显示三行,多余...展开,点击展开收起 getClientRects

热门文章

  1. 多层陶瓷电容器用处_【科普】片状多层陶瓷电容器的封装方法,你了解吗?
  2. java多个按钮监听,如何改成监听多个按钮啊用e.getsource()
  3. crf java实现_Tensorflow实现crf损失
  4. php查看文件属性,文件目录属性及权限
  5. oracle 查看日志组切换状态_Oracle 逻辑结构篇 之 重做日志和归档日志管理(一)...
  6. 计算机临床医学自动化哪个好,大学专业难度排行前十名,临床医学位列第二
  7. linux主从服务器不能同步,Linux下redis的持久化、主从同步与哨兵详解
  8. 【Centos 8】【Centos 7】安装 docker
  9. jvm学习笔记(三)
  10. xmind快捷键_XMind思维导图软件最全面的使用教程!