博客
关于我
打表与活用递推
阅读量: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编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>
    Python编程:Tkinter图形界面设计(2)
    查看>>
    Python 基础 - Day 5 Learning Note - 模块 之 标准库:time (1)
    查看>>
    Python 基础一
    查看>>
    python 基础操作知识整理总结
    查看>>
    Python 基础知识点整理与分享,期盼你的交流!
    查看>>
    python 基础第七篇
    查看>>
    Python编程:Tkinter图形界面设计(1)
    查看>>
    Python 基础语法:None
    查看>>
    Python 基础语法:基本数据类型(一)
    查看>>
    python编程读取写入excel_Python读取txt内容写入xls格式excel中的方法
    查看>>
    Python 基础语法:基本数据类型(字典)
    查看>>
    Python 基础语法:基本数据类型(字符串)
    查看>>