题目描述

有一个仅包含’a’和’b’两种字符的字符串s,长度为n,每次操作可以把一个字符做一次转换(把一个’a’设置为’b’,或者把一个’b’置成’a’);但是操作的次数有上限m,问在有限的操作数范围内,能够得到最大连续的相同字符的子串的长度是多少。

输入描述:

第一行两个整数 n , m (1<=m<=n<=50000),第二行为长度为n且只包含’a’和’b’的字符串s。

输出描述:

输出在操作次数不超过 m 的情况下,能够得到的 最大连续 全’a’子串或全’b’子串的长度。

示例1

输入

8 1
aabaabaa

输出

5

说明

把第一个 'b' 或者第二个 'b' 置成 'a',可得到长度为 5 的全 'a' 子串。我的方法:
#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>using namespace std;int main() {int n, m;int j = 0, k = 0;int maxLen = 0;string s;cin >> n >> m;cin >> s;int astring[50000] = { 0 };int bstring[50000] = { 0 };for (int i = 0; i<n; i++) {if (s[i] == 'a')astring[j++] = i;elsebstring[k++] = i;}if (m >= j || m >= k) {cout << s.size() << endl;return 0;}if (m <= 0) {int j = 0;for (int i = 0; i < s.size(); i++) {maxLen = max(maxLen, i - j);while (s[j] != s[i])j++;}cout << maxLen << endl;return 0;}//首位处理,0<m<j,0<m<kint maxLen1 = max(astring[m], int(s.size() - astring[j - m-1]-1));   for (int i = 1; (i + m) < j; i++) {maxLen1 = max(astring[i + m] - astring[i - 1] - 1, maxLen1);}int maxLen2 = max(bstring[m], int(s.size() - bstring[k - m-1]-1));for (int i = 1; (i + m) < k; i++) {maxLen2 = max(bstring[i + m] - bstring[i - 1] - 1, maxLen2);}maxLen = max(maxLen1, maxLen2);cout << maxLen << endl;return 0;
}

方法二:


#include<iostream>
#include<vector>
#include<algorithm>
#include<string>using namespace std;string str;
int n, m;int change_alpha(char k)
{vector<int> loc;for (int i = 0; i < n; ++i)if (str[i] == k) loc.push_back(i);loc.push_back(n);int max_length = loc[m];for (int i = m + 1; i < loc.size(); ++i) {// loc[i]当前k实际索引, loc[i-m-1] i的前面m个数翻转之后,再前面的未翻转k的索引// loc[i] - loc[i-m-1] - 1 之间翻转m个k之后,中间字符的长度。max_length = max(max_length, loc[i] - loc[i-m-1] - 1);}return max_length;
}int main()
{cin >> n >> m;cin >> str;cout << max(change_alpha('a'), change_alpha('b')) << endl;

今日头条2018校招编程题相关推荐

  1. 今日头条2017校招编程题

    贪心?瞎搞  先排个序,然后扫一遍,边扫边维护一个数组v   v的长度为3    设vs数组的最后一个是x 如果abs(a[i]-x)大于10 那么贪心的策略我就 添加个v+10相应的ans++.   ...

  2. 今日头条2018校招测试开发方向(第一、二、三、四批)编程题汇总 - 题解

    对于今日头条这家公司来说,测试的题和后端开发的题几乎是一样的,但是由于第一批的后端开发的题没有在牛客网上放出来,因此,猜测后端开发第一批的题应该和后端开发第一批的题一样,同时也想做一个测试方向编程题的 ...

  3. 今日头条2018校招测试开发方向(第一批)详解

    ##问答题 #####1.给定一棵树的根节点, 在已知该树最大深度的情况下, 求节点数最多的那一层并返回具体的层数. ######如果最后答案有多层, 输出最浅的那一层,树的深度不会超过100000. ...

  4. 京东校招java面试题_京东2018校招编程题解答(Java)

    写在前面 本文主要是解答这次校招中京东的笔试编程题,这次京东的笔试编程题比较难,涉及KMP算法.manacher算法等.文中的解法也是在观看了左神(左程云)9月20号在牛客网的直播后,自己花时间写出来 ...

  5. 今日头条2018校招后端方向(用户喜好)c++

    题目描述: 为了不断优化推荐效果,今日头条每天要存储和处理海量数据.假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用 ...

  6. 今日头条2018校招后端方向(第二批)

    1.为了不断优化推荐效果,今日头条每天要存储和处理海量数据.假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号 ...

  7. 拼多多2018校招编程题

    [编程题] 最大乘积 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)  输入描述: 无序整数数组A[n] 输出描述: 满足 ...

  8. 今日头条2018校招大数据/算法方向(第一批)详解

    问答题 1.给定一棵树的根节点, 在已知该树最大深度的情况下, 求节点数最多的那一层并返回具体的层数. 如果最后答案有多层, 输出最浅的那一层,树的深度不会超过100000.实现代码如下,请指出代码中 ...

  9. 今日头条2018校招后端方向(第二批)编程题2,串珠问题。java代码。

    作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串--每个串珠要么无色,要么涂了若干种颜色.为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串 ...

最新文章

  1. CentOS6.4+rabbitmq集群——源码安装
  2. 带你开发类似 Pokemon Go 的 AR 游戏
  3. Zabbix如何实现Server和Agent的通信加密
  4. 通过Nginx简单安装
  5. modelsim显示状态机名称的方法
  6. 房费制 它 结账BUG
  7. JPA+Hibernate 3.3 ——第一个JPA程序
  8. MySQL数据表查询操作
  9. ios签名php在线监控,IOS无需签名无需越狱H5网页在线封装APP教程
  10. 炉石兄弟 修复图腾师问题 by大神beebee102, 还有阴燃电鳗
  11. 浏览器页面前端自适应方案
  12. 每天叫醒的不是闹钟而是励志文章梦想
  13. 【MT19937】学习分析
  14. Fatal error: Cannot use 'Object' as class name as it is reserved in xxx/Object.php on line 77
  15. 计算机点击应用时总是跳到顶端,电脑总是跳出当前应用程序
  16. HTML中常见的选择器 的优先级
  17. python-office的使用
  18. Fiddler 抓包下载 M3U8 视频
  19. 中年人学C语言Windows程序设计,30 DialogBox控件
  20. 西安西北大学计算机排名,全国计算机排名真是这样吗?

热门文章

  1. ghost使用大全-GHOST,竟然不知道这么多参数
  2. python Stark 组件
  3. FTP错误详解及解决方案
  4. 【Autopsy数字取证篇】Autopsy数字取证软件的下载安装与优化配置
  5. 华为最新5G V2X高级使用案例曝光,未来交通是这样的!
  6. 纪伯伦 《先知》 孩子
  7. 初中 昆虫记思维导图_《昆虫记》的思维导图
  8. python饼图添加颜色_PythonPlotly:通过字典自定义饼图颜色
  9. Mybatis文件格式不匹配 -读取xml文件失败
  10. ASR 混合高斯模型GMM的理解