PAT A1093/B1045 Count PAT's (25point(s))

题目链接
遍历字符串,PAT的个数等于每一个A的左边P的个数乘以右边T的个数的累加和。可以用一个整形数组记录每一位左边的P的个数。

#include<cstdio>
#include<cstring>
char str[100001];
int p_num[100001];//p_num[i]表示当前位左边p的个数
int main(){
    scanf("%s",str);
    int count=0,t_count=0,len=strlen(str);
    for(int i=0;i<len;i++){//从左到右遍历字符串
       if(i>0){//当前为不是0
           p_num[i]=p_num[i-1];//继承上一位的结果
       }
        if(str[i]=='P'){//如果当前位是p
            p_num[i]++;//令p_num[i]自增1
        }
    }
    for(int i=len-1;i>=0;i--){//从右到左遍历字符串
        if(str[i]=='T'){//如果当前位是T
            t_count++;//右边t的个数增1
        }
        else if(str[i]=='A'){//如果当前为是A
            count=(count+p_num[i]*t_count)%1000000007;
            //累计乘积
        }
    }
    printf("%d",count);
return 0;   
}
发布了81 篇原创文章 · 获赞 0 · 访问量 666

猜你喜欢

转载自blog.csdn.net/weixin_44546393/article/details/105440369