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

    你可能感兴趣的文章
    PLSQL Developer调试 存储过程和触发器
    查看>>
    PLSQL window操作
    查看>>
    plsql 存储过程 测试
    查看>>
    plsql 安装后database下拉没有东西
    查看>>
    PLSQL_Oracle PLSQL内置函数大全(概念)
    查看>>
    PLSQL_案例优化系列_体验逻辑结构如何影响SQL优化(案例3)
    查看>>
    PLSQL中INDEX BY TABLE的 DELETE操作
    查看>>
    plsql学习笔记---plsql相关概念,以及基础结构
    查看>>
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    Unknown character set: 'utf8mb4'
    查看>>
    PML调用PDMS内核命令研究
    查看>>