PTA乙级1040

1040

字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。

现给定字符串,问一共可以形成多少个 PAT?

输入格式:
输入只有一行,包含一个字符串,长度不超过10^
​5
​​ ,只包含 P、A、T 三种字母。

输出格式:

在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

输入样例:

APPAPT

输出样例:

2

思路:我的思路是先得出T的总个数,然后判断遇到P的个数,之后每遇到一次T,之前T的次数就减少一个,然后遇到A就得到当前的总PAT个数

package test1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PTA1040 {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        char[] s = in.readLine().toCharArray();
        in.close();
        int countP = 0, countT = 0;
        long pat = 0;
        for (char c : s) {
            if (c == 'T')
                countT++;
        }
        for (char c : s) {
            if (c == 'P')
                countP++;
            if (c == 'T')
                countT--;
            if (c == 'A') {
                pat = pat + countP * countT;
                if (pat > 1000000007)
                    pat = pat % 1000000007;
            }
        }
        System.out.println(pat);
    }
}

运行结果:
PATPPTAPTAPATPATPATATPTATATATAAPTAPTATP
524

### PTA乙级 Python 1125 解题思路及代码实现 对于PTA乙级中的Python题目1125,即反转链表问题,在处理此类涉及数据结构操作的任务时,理解链表的基本概念及其操作至关重要[^1]。 在解决这个问题的过程中,采用迭代的方法来逐个节点访问并调整指针方向是一种常见策略。这种方法不仅直观而且易于理解和实现。为了提高效率和简化逻辑流程,可以在遍历过程中维护三个指针变量分别指向当前节点、前驱节点以及后续节点。这有助于安全地改变各节点之间的连接关系而不丢失任何信息[^4]。 下面是一个具体的Python实现方案: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def reverseList(head: ListNode) -> ListNode: prev = None curr = head while curr is not None: nxt = curr.next # Store the next node temporarily. curr.next = prev # Reverse link direction. # Move forward two pointers. prev = curr curr = nxt return prev # New head of reversed list will be 'prev'. ``` 此段代码定义了一个`ListNode`类用于表示单向链表中的各个元素,并实现了函数`reverseList()`完成对给定链表的反转操作。该算法的时间复杂度为O(n),其中n代表链表长度;空间复杂度则保持常量级别O(1),因为只用了固定数量额外的空间存储临时变量。 尽管Python作为解释型语言可能会在某些情况下表现不如编译型语言高效,但对于本题而言,上述解决方案已经能够满足性能需求并通过所有测试案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值