博客
关于我
打表与活用递推
阅读量:532 次
发布时间:2019-03-08

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

对于字符串问题,寻找三字符组成的“PAT”形式的个数是一个典型的需要高效处理的任务。直接暴力方法感兴趣慢,前方小编尝试采用预处理技术和递推思想,最终成功找到了一种有效解决方案。

一、打表与递推技术

在这个问题中,打表技术被巧妙地运用,有助于预先计算各个位置的关键信息。通过一次前后遍历,预处理出每个位置左边的P个数和右边的T个数。然后,这些预处理的数据可以快速被用于计算每个A节点对最终结果贡献。

具体步骤:

  • 预处理左边P数量:从左到右遍历字符串,记录每个位置左边(含本位)连续出现的P的数量。这一步通过一次线性遍历即可完成。

  • 计算A的贡献:从右到左遍历字符串,维护一个记录当前右边T的数量。每遇到一个A,就计算该A所能形成的PAT的数量,即左边P数量乘以右边T数量,并将结果累计到最终答案中。

  • 二、代码实现

    具体实现如下:

    #include 
    #include
    const int MAXN = 100005;const int MOD = 1000000007;int main() { char str[MAXN]; gets(str); int len = strlen(str); int* leftP = new int[len]{0}; for (int i = 0; i < len; ++i) { if (i == 0) { if (str[i] == 'P') leftP[i] = 1; else leftP[i] = 0; } else { if (str[i] == 'P') leftP[i] = leftP[i-1] + 1; else leftP[i] = leftP[i-1]; } } int ans = 0; int rightT = 0; for (int i = len - 1; i >= 0; --i) { if (str[i] == 'T') { rightT++; } else if (str[i] == 'A') { ans = (ans + leftP[i] * rightT) % MOD; } } printf("%d\n", ans); delete[] leftP; return 0;}

    三、谨慎处理细节

    在代码实现中,需要仔细注意以下几点:

  • 初始化问题:确保左边P数组的初始值正确,尤其是首位的情况。

  • 取模处理:每次累加时都应及时取模,防止数值溢出,并符合题目要求。

  • 遍历方向:右边T的数量需要从右向左统计,以确保每个A的右边T数目正确。

  • 空间复杂度:预处理后的数组虽然占用了额外的空间,但在处理过程中是必要的。需确保数组的大小适中,可以正确处理最大输入长度。

  • 这种方法通过预处理和递推巧妙地将一个看似复杂的问题转化为简单的线性时间计算,大幅提高了效率,适用于处理较大数据规模的问题。

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

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
    查看>>
    OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
    查看>>
    OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
    查看>>
    OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
    查看>>
    OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
    查看>>
    Opencv中KNN背景分割器
    查看>>
    OpenCV中基于已知相机方向的透视变形
    查看>>
    opencv之模糊处理
    查看>>
    opencv保存图片路径包含中文乱码解决方案
    查看>>
    opencv图像分割2-GMM
    查看>>
    OpenCV学习(13) 细化算法(1)(转)
    查看>>
    OpenCV探索
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    Openlayers Source基础及重点内容讲解
    查看>>
    openlayers 入门教程(八):Geoms 篇
    查看>>
    Openlayers中点击地图获取坐标并输出
    查看>>