当前位置: 首页 > article >正文

【填充——双指针,DP】

题目

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
char s[N];
bool check(int a, int b)
{
  if(s[a] == '?' || s[b] == '?') return true;
  if(s[a] == s[b]) return true;
  return false;
}
int main()
{
  cin >> s;
  int n = strlen(s);

  int i = 1, cnt = 0;
  while(i < n)
  {
    if(check(i-1, i)) {i += 2, cnt++;}
    else i += 1;
  }

  cout << cnt;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
char s[N];
int f[N];
bool check(int a, int b)
{
  if(s[a] == '?' || s[b] == '?') return true;
  if(s[a] == s[b]) return true;
  return false;
}
int main()
{
  cin >> s+1;
  int n = strlen(s+1);

  f[0] = f[1] = 0;
  for(int i = 2; i <= n; i++)
  {
    if(check(i-1, i)) f[i] = f[i-2] + 1;
    else f[i] = f[i-1];
  }

  cout << f[n];
}

若改成允许重叠,用动态规划解决

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int f[N][2];
char s[N];
int main()
{
    cin >> s + 1;

    f[1][0] = f[1][1] = 0;
    int n = strlen(s + 1);
    for (int i = 2; i <= n; i++)
    {
        if (s[i] == '?')
        {
            if (s[i - 1] == '0')
            {
                f[i][0] = f[i - 1][0] + 1;
                f[i][1] = f[i - 1][0];
            }
            else if (s[i - 1] == '1')
            {
                f[i][1] = f[i - 1][1] + 1;
                f[i][0] = f[i - 1][1];
            }
            else
            {
                f[i][1] = max(f[i - 1][1] + 1, f[i - 1][0]);
                f[i][0] = max(f[i - 1][0] + 1, f[i - 1][1]);
            }
        }
        else if (s[i] == '1')
        {
            f[i][1] = max(f[i - 1][1] + 1, f[i - 1][0]);
        }
        else if (s[i] == '0')
        {
            f[i][0] = max(f[i - 1][0] + 1, f[i - 1][1]);
        }
    }

    cout << max(f[n][0], f[n][1]);
    return 0;
}


http://www.kler.cn/a/520758.html

相关文章:

  • 狗狗能吃萝卜吗?
  • 数据的秘密:如何用大数据分析挖掘商业价值
  • Vue.js组件开发-如何实现带有搜索功能的下拉框
  • 2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)
  • 新电脑安装系统找不到硬盘原因和解决方法来了
  • 几种常见的求特殊方程正整数解的方法和示例
  • 【算法】剪枝与优化
  • java复习总结
  • 有赞任务js脚本
  • C#的反射使用示例
  • c++小知识点
  • 从规则到神经网络:机器翻译技术的演进与未来展望
  • Golang 执行流程分析
  • 「 机器人 」扑翼飞行器的偏航力矩控制:分周期参数调节机制
  • 【SpringMVC】——Json数据交互处理
  • Leetcode::3432. 统计元素和差值为偶数的分区方案
  • 数据库、数据仓库、数据湖有什么不同
  • redis 实践与扩展
  • 【论文复现】一种改进哈里斯鹰优化算法用于连续和离散优化问题
  • SSM开发(三) spring与mybatis整合(含完整运行demo源码)
  • STM32 OLED屏配置
  • 新电脑第一次开机激活
  • 基于OpenCV实现的答题卡自动判卷系统
  • 【机器学习】深入探索SVM:支持向量机的原理与应用
  • 三角形的最大周长(LeetCode 976)
  • 项目测试之Jmeter