字节跳动2023秋招-小红的 01 串
https://oj.algomooc.com/problem.php?id=5904
题目描述
小红拿到了一个 01 串,她准备将若干个字符'1'染成红色,将若干个字符'0'染成蓝色,但有个限制:如果一个'0 和一个'1 相邻,那么它们不能同时染色。
小红想知道,最多可以染多少个字符?
输入
输入仅有一行,为小红拿到的 01 串。
字符串长度不超过200000。
输出
一个正整数,代表能染色的最多字符。
样例输入 复制
110011
样例输出 复制
4
这个题是个dp,
dp[i][0]指的是第i个不染色的前提下前i个做多可以染多少个
dp[i][1]指的是第i个染色的前提下前i个最多可以染多少个
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn=5e5+100;
char a[maxn];
int dp[maxn][2];//0是不染色,1染色
int main(){
scanf("%s",a+1);
int n=strlen(a+1);
dp[0][0]=dp[0][1]=0;
for(int i=1;i<=n;i++){
if(a[i]!=a[i-1]){
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);//不染
dp[i][1]=dp[i-1][0]+1;
}
else{
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0])+1;
}
}
cout<<max(dp[n][1],dp[n][0])<<endl;
}

浙公网安备 33010602011771号