博客
关于我
打表与活用递推
阅读量: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/

    你可能感兴趣的文章
    Python "HTTP Error 403: Forbidden"
    查看>>
    python %ns的作用
    查看>>
    Python + Appium 之 APP 自动化测试,坑点汇总!(建议收藏)
    查看>>
    Python + Appium 自动化操作微信入门(超详细)
    查看>>
    Python + Pytest 自动化框架的用例依赖实操
    查看>>
    Python + requests实现接口自动化测试!
    查看>>
    python + requests实现的接口自动化测试(超详细~)
    查看>>
    Python + selenium 如何截图?
    查看>>
    Python + Selenium 登录QQ邮箱
    查看>>
    Python + selenium如何做接口自动化测试?
    查看>>
    Python + selenium如何截图!
    查看>>
    Python + selenium自动化生成测试报告!
    查看>>
    Python - C 嵌入式分段错误
    查看>>
    Python - DM 一个用户 Discord 机器人
    查看>>
    python - Flask 基础 - 蓝图( Blueprint )(2)
    查看>>
    python - os.getenv 和 os.environ 看不到我的 bash shell 的环境变量
    查看>>
    Python - while循环
    查看>>
    Python - “if“中的逻辑评估顺序陈述
    查看>>
    Python - 使用 pandas 格式化 Excel 单元格
    查看>>
    python - 列表
    查看>>