博客
关于我
1093 Count PAT‘s (25分) 含DP做法
阅读量:376 次
发布时间:2019-03-05

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

为了解决这个问题,我们需要计算给定字符串中包含多少个“PAT”子串。通过预处理左边的P的数量和右边的T的数量,然后在每个可能的A的位置上计算它们的乘积之和,可以高效地解决这个问题。

方法思路

  • 预处理左边的P的数量:创建一个数组preP,其中preP[i]表示从字符串开头到位置i(包括i)左边有多少个P。
  • 预处理右边的T的数量:创建一个数组postT,其中postT[i]表示从位置i到字符串末尾右边有多少个T。
  • 计算总数:遍历字符串,当遇到字符A时,将preP[i]postT[i]相乘,并将结果加到总数中。
  • 这种方法的时间复杂度是O(n),非常高效,适用于长度很大的字符串。

    解决代码

    #include 
    #include
    using namespace std;#define MOD 1000000007int main() { string m; cin >> m; int n = m.size(); if (n == 0) { cout << 0 << endl; return 0; } vector
    preP(n, 0); preP[0] = (m[0] == 'P') ? 1 : 0; for (int i = 1; i < n; ++i) { preP[i] = (m[i] == 'P') ? preP[i-1] + 1 : preP[i-1]; } vector
    postT(n, 0); postT[n-1] = (m[n-1] == 'T') ? 1 : 0; for (int i = n-2; i >= 0; --i) { postT[i] = (m[i] == 'T') ? postT[i+1] + 1 : postT[i+1]; } long long res = 0; for (int i = 0; i < n; ++i) { if (m[i] == 'A') { res = (res + preP[i] * postT[i]) % MOD; } } cout << res % MOD << endl; return 0;}

    代码解释

  • 读取输入:从标准输入读取字符串m
  • 初始化数组:创建两个数组prePpostT,分别记录每个位置左边的P的数量和右边的T的数量。
  • 计算preP数组:从左到右遍历字符串,统计每个位置左边的P的数量。
  • 计算postT数组:从右到左遍历字符串,统计每个位置右边的T的数量。
  • 计算总数:遍历字符串,当遇到字符A时,计算preP[i]postT[i]的乘积,并累加到结果中,最后输出结果模1e9+7。
  • 这种方法确保了在处理大字符串时的效率,避免了暴力枚举所有可能的子串。

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

    你可能感兴趣的文章
    RabbitMQ高级特性
    查看>>
    php如何定义的数位置,php如何实现不借助IDE快速定位行数或者方法定义的文件和位置...
    查看>>
    RabbitMQ集群 - 普通集群搭建、宕机情况
    查看>>
    php如何正确的获得文件的后缀名
    查看>>
    PHP如何生成唯一的数字ID
    查看>>
    PHP如何获取当前页面的最后修改时间
    查看>>
    PHP如何读取json数据
    查看>>
    PHP字符串
    查看>>
    PHP字符串递增
    查看>>
    php学习之基础语法
    查看>>
    RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
    查看>>
    PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
    查看>>
    PHP学习总结(12)——PHP入门篇之变量
    查看>>
    PHP学习总结(13)——PHP入门篇之常量
    查看>>
    PHP学习总结(14)——PHP入门篇之常用运算符
    查看>>
    PHP学习总结(1)——PHP入门篇之PHP可以做什么?
    查看>>
    PHP学习总结(2)——PHP入门篇之PHP代码标识
    查看>>
    PHP学习总结(3)——PHP入门篇之PHP的echo语句
    查看>>
    PHP学习总结(4)——PHP入门篇之PHP计算表达式
    查看>>
    PHP学习总结(5)——PHP入门篇之PHP字符串
    查看>>