1040 有几个PAT (25 分) AC

1040 有几个PAT (25 分)

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

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

输入格式:

输入只有一行,包含一个字符串,长度不超过10510^5105,只包含 PAT 三种字母。

输出格式:

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

输入样例:

APPAPT

输出样例:

2

C语言代码实现

//
// Created by hejinyang on 19-6-22.
//

#if 0

#include 
#include 

int findCharNum(char ch, char *start_pos, char *end_pos) {
     
    int num = 0;
    for (char *p = start_pos; p != end_pos; p++) {
     
        if (*p == ch) {
     
            num++;
        }
    }
    return num;
}


int main(int argc, char *argv[]) {
     
    char str[100001];
    scanf("%s", str);
    char *end_pos = str + strlen(str); //指向'\0'
    long long cunt = 0;
    long long P_num = 0, T_num = 0;
    char *A_pos = strchr(str, 'A');
    char *last_A_pos = str;
    int first = 1;
    while (A_pos != NULL) {
     
        P_num = P_num + findCharNum('P', last_A_pos, A_pos);
        if (first) {
     
            T_num = findCharNum('T', A_pos+1, end_pos);
            first = 0;
        } else {
     
            T_num = T_num - findCharNum('T', last_A_pos, A_pos);
        }
        cunt += P_num * T_num;
        last_A_pos = A_pos;
        A_pos = strchr(A_pos + 1, 'A');
    }


    printf("%lld", cunt % 1000000007);

    return 0;
}

#endif

结果

你可能感兴趣的:(PAT)