蓝桥杯C组-填充-贪心

点击此处查看原题​​​​​​​

*思路:首先要求 00 11 尽可能的多,所以尽可能多的多配对,配对只在i , i + 1之间发生,所以只需要关注str[i] 和 str[i + 1]即可,如果str[i] == str[i + 1] ,那么一定配对,res ++ , 否则说明只有 str[i] == 0 && str[i + 1] == 1 或者 str[i] == 1 && str[i + 1] == 0 两种情况,对于这种情况直接跳过,如果str[i] 或者 str[i + 1]中的某一个是?的话,那么一定可以和下一个字符匹配,所以res++,如果是??,那么随便是 11 和 00 都可以,不必担心后面的数,假如??00 = 2 , ?? 01 = 1 ,?? 11 = 2,??10 = 1 ,说明当前的 str[i] 和 str[i + 1]无关的。所以只需分 str[i] == str[i +1] 和 str[i] 或str[i + 1] 中有一个为?即可

cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e6 + 10;

int main()
{
    string str;
    cin >> str;
    
    int res = 0;
    for(int i = 0 ; i < str.size() - 1 ;i ++)
    {
        if(str[i] == str[i + 1])
        {
            res ++;
            i ++;
        }
        else if(str[i + 1] == '?' || str[i] == '?')
        {
            res ++;
            i ++;
        }
    }
    cout << res << endl;
    
    return 0;
}
相关推荐
CHANG_THE_WORLD12 分钟前
C/C++字符串定义的五种写法 和 C/C++字符串隐藏技术深度剖析
c++
sycmancia17 分钟前
C++——初始化列表的使用
开发语言·c++
白太岁27 分钟前
Redis:(3) Lua 与 Redis、基于连接池的 Facade 模式封装
数据库·c++·redis·lua·外观模式
『往事』&白驹过隙;30 分钟前
系统编程的内存零拷贝(Zero-Copy)技术
linux·c语言·网络·c++·物联网·iot
量子炒饭大师1 小时前
【C++入门】Cyber高维的蜂巢意识 —— 【类与对象】static 成员
开发语言·c++·静态成员变量·static成员
ShineWinsu1 小时前
对于stack和queue经典算法题目:155. 最小栈、JZ31 栈的压入、弹出序列和102. 二叉树的层序遍历的解析
数据结构·c++·算法·面试·力扣·笔试·牛客网
SWAGGY..1 小时前
【c++初阶】:(1)c++入门基础知识
开发语言·c++
0 0 01 小时前
CCF-CSP 40-3 图片解码(decode)【C++】考点:矩阵翻转/旋转
开发语言·c++·矩阵
星火开发设计1 小时前
序列式容器:list 双向链表的特性与用法
开发语言·前端·数据结构·数据库·c++·链表·list
程序员敲代码吗2 小时前
Qt Quick中QML与C++交互详解及场景切换实现
c++·qt·交互