牛客寒假算法1-H-nozomi和字符串

本文探讨了一个牛客网寒假算法挑战题目,旨在通过k次操作将包含0和1的字符串转换为单一字符的最长连续串。介绍了记录0和1下标的策略,并通过代码实现展示了如何找到最长连续子串的方法。

题目链接:牛客算法寒假一H
题意: 给出一个只包含01的字符串,长度为n,可以有k次操作,使0变为1或1变为0,然后让输出只包含0或1的串的最长长度。
想法: 说一个简单的想法,记录0的下标和1的下标,可以消除k个阻隔,也就是 所有的间隔有k个的下标之差的最大值就是答案。(上代码可能好理解一些)

#include<bits/stdc++.h>
#include<vector>
using namespace std;
vector<int >dis[2];
int main(){
 int n,k;
 scanf("%d%d",&n,&k);
 char s[200500];
 scanf("%s",s);
 dis[0].push_back(0);
 dis[1].push_back(0);
 for(int i=0;i<n;i++){
	  dis[s[i]-'0'].push_back(i+1);
 }
 dis[0].push_back(n+1);
 dis[1].push_back(n+1);   //处理边界
 int ans=k;
 for(int i=0;i<(int )dis[0].size()-k-1;i++){     //找出1的最大长度
  	ans=max(ans,dis[0][i+k+1]-dis[0][i]-1);
 }
 for(int i=0;i<(int )dis[1].size()-k-1;i++){    //找出0的最大长度
  	ans=max(ans,dis[1][i+k+1]-dis[1][i]-1);
 }
 printf("%d\n",ans);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值