PAT1093 Count PAT's (25)(逻辑题)
预先计算左边的 P 数量:从左到右遍历字符串,记录每个位置左边的 'P' 的数量累积。 预先计算右边的 T 数量:从右到左遍历字符串,记录每个位置右边的 'T' 的数量累积。 遍历每个 'A' 的位置:对于每个遇到的 'A',计算其左边的 'P' 数量和右边的 'T' 数量的乘积,并将结果累加到总数中。 读取输入字符串:从标准输入读取字符串 初始化数组:创建两个数组 计算左边的 'P' 数量:从左到右遍历字符串,累积计算每个位置左边的 'P' 的数量。 计算右边的 'T' 数量:从右到左遍历字符串,累积计算每个位置右边的 'T' 的数量。 遍历每个字符:对于每个遇到的 'A',计算其左边的 'P' 数量和右边的 'T' 数量的乘积,并累加到结果中,最后对结果取模。 输出结果:打印最终计算的结果。
发布日期:2025-05-01 23:09:41
浏览次数:12
分类:精选文章
本文共 1344 字,大约阅读时间需要 4 分钟。
为了解决寻找字符串中 PAT 子串的问题,我们可以使用以下方法:
方法思路
问题要求我们在一个只包含字符 'P'、'A'、'T' 的字符串中找到所有可能的 PAT 子串的数量。我们可以通过以下步骤来解决这个问题:
这种方法的时间复杂度是 O(n),其中 n 是字符串的长度。通过预先计算左右两边的数量,避免了多次遍历,从而提高了效率。
解决代码
#includeusing 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_p 和 right_t,分别用于存储每个位置左边的 'P' 数量和右边的 'T' 数量。这种方法通过预先计算左右两边的数量,确保了每个 'A' 的计算是高效准确的,从而能够快速解决问题。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2026年06月15日 07时43分35秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP 支持8种基本的数据类型
2023-02-28
php 放大镜,放大镜放大图片效果
2023-02-28
PHP 数据库连接池实现
2023-02-28
php 数组 区别,PHP中数组的区别
2023-02-28
PHP 数组怎么添加一个元素
2023-02-28
PHP 文件操作
2023-02-28
php 文字弹幕效果代码,HTML5文字弹幕效果
2023-02-28
php 时间日期函数,获取今天开始时间,结束时间
2023-02-28
php 标准规范
2023-02-28
PHP 浮点型精度运算相关问题
2023-02-28
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28
php 生成csv mac下乱码
2023-02-28
php 生成证书 签名及验签
2023-02-28
PHP 的标准输入与输出
2023-02-28
php 笔记 (早前的,很乱)
2023-02-28
PHP 第一天
2023-02-28
Redis使用量暴增,快速定位有哪些大key在作怪
2023-02-28
PHP 统计数据功能 有感
2023-02-28
SpringBoot处理JSON数据
2023-02-28