活用递推(基于two pointer)
统计一串字符中出现了几次给定的单词
比如:
PAT:PAT出现了一次
PATT:PAT出现了两次
#include<cstdio>
#include<string.h>
using namespace std;
int main()
{
char A[100];
char ch;
int i=0;
int ans=0;
while((ch=getchar())!='\n')
{
A[i++]=ch;
}
char B[100];
int psum=0;
for(int j=0;j<i;j++)
{
if(A[j]=='P')
{
B[j]=++psum;
}else{
B[j]=B[j-1];
}
}
int tsum=0;
for(int k=i-1;k>=0;k--)
{
if(A[k]=='T')
{
++tsum;
}
if(A[k]=='A')
{
ans=ans+tsum*B[k];
}
}
printf("%d\n",ans);
return 0;
}
先用B数组记录P出现的次数,在统计T的过程中,如果遇到A,就与前面T出现的次数进行相乘,与原来ans相加。
今天写的比较简单