博客
关于我
PAT1093 Count PAT's (25)(逻辑题)
阅读量:794 次
发布时间:2023-02-26

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

为了解决寻找字符串中 PAT 子串的问题,我们可以使用以下方法:

方法思路

问题要求我们在一个只包含字符 'P'、'A'、'T' 的字符串中找到所有可能的 PAT 子串的数量。我们可以通过以下步骤来解决这个问题:

  • 预先计算左边的 P 数量:从左到右遍历字符串,记录每个位置左边的 'P' 的数量累积。
  • 预先计算右边的 T 数量:从右到左遍历字符串,记录每个位置右边的 'T' 的数量累积。
  • 遍历每个 'A' 的位置:对于每个遇到的 'A',计算其左边的 'P' 数量和右边的 'T' 数量的乘积,并将结果累加到总数中。
  • 这种方法的时间复杂度是 O(n),其中 n 是字符串的长度。通过预先计算左右两边的数量,避免了多次遍历,从而提高了效率。

    解决代码

    #include 
    using namespace std;int main() { string s; cin >> s; int n = s.size(); if (n == 0) return 0; vector
    left_p(n, 0); vector
    right_t(n, 0); // 计算左边的P数量累积 left_p[0] = (s[0] == 'P') ? 1 : 0; for (int i = 1; i < n; ++i) { left_p[i] = left_p[i-1] + (s[i] == 'P' ? 1 : 0); } // 计算右边的T数量累积 right_t[n-1] = (s[n-1] == 'T') ? 1 : 0; for (int i = n-2; i >= 0; --i) { right_t[i] = right_t[i+1] + (s[i] == 'T' ? 1 : 0); } int result = 0; for (int i = 0; i < n; ++i) { if (s[i] == 'A') { result = (result + left_p[i] * right_t[i]) % 1000000007; } } printf("%d", result); return 0;}

    代码解释

  • 读取输入字符串:从标准输入读取字符串 s
  • 初始化数组:创建两个数组 left_pright_t,分别用于存储每个位置左边的 'P' 数量和右边的 'T' 数量。
  • 计算左边的 'P' 数量:从左到右遍历字符串,累积计算每个位置左边的 'P' 的数量。
  • 计算右边的 'T' 数量:从右到左遍历字符串,累积计算每个位置右边的 'T' 的数量。
  • 遍历每个字符:对于每个遇到的 'A',计算其左边的 'P' 数量和右边的 'T' 数量的乘积,并累加到结果中,最后对结果取模。
  • 输出结果:打印最终计算的结果。
  • 这种方法通过预先计算左右两边的数量,确保了每个 'A' 的计算是高效准确的,从而能够快速解决问题。

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

    你可能感兴趣的文章
    Pandas matplotlib 无法显示中文
    查看>>
    pandas PIVOT_TABLE保持索引
    查看>>
    Pandas Plots:周末的单独颜色,x 轴上漂亮的打印时间
    查看>>
    pandas to_latex() 转义数学模式
    查看>>
    Pandas | 频数统计很简单,但这5 种技巧你使用过吗?
    查看>>
    Pandas 中文官档 ~ 基础用法4
    查看>>
    pandas 中的 for 循环真的很糟糕吗?我什么时候应该关心?
    查看>>
    Pandas 中的多索引旋转
    查看>>
    Pandas 中的日期范围
    查看>>
    pandas 中的时间序列箱线图
    查看>>
    Pandas 使用指南
    查看>>
    pandas 分组并使用最小值更新
    查看>>
    pandas 均值(mean), 均值填充NA(fill_na)
    查看>>
    Pandas 对数据框的布尔比较
    查看>>
    pandas 将通话数据分割为15分钟的间隔
    查看>>
    pandas 找到局部最大值和最小值
    查看>>
    pandas 按日期和年份分组,并汇总金额
    查看>>
    pandas 数据帧到PostgreSQL表中使用的是没有SQLAlChemy的心理复制2吗?
    查看>>
    pandas 数据帧多行查询
    查看>>
    Pandas 数据框:使用线性插值重新采样
    查看>>