博客
关于我
密码脱落(区间dp,最长公共子序列)
阅读量:747 次
发布时间:2019-03-21

本文共 1351 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找出一个由A、B、C、D四种字符构成的字符串,使其至少脱落多少个字符后变成反转对称的字符串。我们可以使用动态规划的方法来解决这个问题。

方法思路

我们的任务是把给定的字符串转换成一个回文字符串。为了解决这个问题,我们可以使用动态规划来找出最长回文子序列的长度。通过计算这个长度,我们就可以确定至少需要脱落多少个字符。

具体步骤如下:

  • 初始化一个二维数组dp,其中dp[l][r]表示从位置l到位置r的最长回文子序列的长度。
  • 遍历字符串的所有长度,从1到字符串的长度。
  • 对于每一个长度,将所有可能的起始和结束位置(l, r)进行处理。如果字符相同,则当前区间的最长回文长度等于内部相似区间的长度加2;否则,取左右相邻区间中的较大者。
  • 最终的最长回文子序列的长度可以通过dp[0][n-1]得到,脱落数量为字符串长度减去这个长度。
  • 解决代码

    #include 
    #include
    using namespace std;int main() { string s; cin >> s; int n = s.size(); if (n == 0) { cout << 0; return 0; } vector
    > dp(n, vector
    (n, 0)); for (int len = 1; len <= n; len++) { for (int l = 0; l < n - len + 1; l++) { int r = l + len - 1; if (s[l] == s[r]) { if (l + 1 > r - 1) { dp[l][r] = 2; } else { dp[l][r] = dp[l + 1][r - 1] + 2; } } else { dp[l][r] = max(dp[l + 1][r], dp[l][r - 1]); } } } int max_len = dp[0][n - 1]; cout << n - max_len << endl; return 0;}

    代码解释

  • 读取输入字符串s
  • 初始化动态规划数组dp,大小为n x n,其中n是字符串长度。
  • 遍历字符串的所有长度,从1到n
  • 对于每个长度,遍历所有可能的起始位置l和结束位置r
    • 如果字符s[l]s[r]相同,则dp[l][r]设为内部相似区间的长度加2。
    • 否则,设为左右相邻区间中的较大者。
  • 输出字符串长度减去最长回文子序列的长度,即为至少脱落的字符数量。
  • 通过这种方法,我们可以高效地解决问题,并确保代码的正确性。

    转载地址:http://jhagz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 如何使用YOLOv9分割图像中的对象
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLOv9检测图片和视频中的目标
    查看>>
    OpenCV与AI深度学习 | 如何在 Docker 容器中使用 GPU
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV确定对象的方向(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YOLOv8 Pose实现瑜伽姿势识别
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用姿态估计算法构建简单的健身训练辅助应用程序
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于OpenCV和K-Means聚类实现颜色分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9和OpenCV实现车辆跟踪计数(步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
    查看>>
    OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
    查看>>