题目描述
有一天课堂上老师出了一个难题给张三,题目:开头给你一个字符串,你可以把ab替换成bba,直到没有ab就算完成任务,然后问你最少替换次数是多少,结果%1000007
输入
输入一个字符串,只含有a与b(1<=字符串长度<=100000)
输出
输出最少替换次数
样例输入
aab
样例输出
3
提示
多组输入
aab->abba->bbaba->bbbbaa
分析:
由题目样例解析我们会发现,替换完后,最终结果肯定是前面都是b,后面都是a,所以我们在替换的时候就是取决于a后面有多少个b,
例如 abb->bbab->bbbba 这里就是被替换了两次
所以我们每次只要数每个a后面有多少个b即可
因为我们考虑到从前面的a开始算的话,后面的a再替换前面也会受到影响,所以我们从后面的a开始处理,然后到每个a的时候去计算后面有多少个b,每找到一个a,b的个数变的规则也很容易看出就是翻了一倍变成2*b,用个变量单独计算b的个数即可
#include"stdio.h"
char a[100000000];
int main()
{
long long count,i,j,l,countb;
while(~scanf("%s",a))
{ count=0;
countb=0;
l=strlen(a)-1;
while(l>=0)
{
if(a[l]=='b')
{
countb++;
}
else
if(countb!=0)
{
count=(count+countb)%1000007;
countb=2*countb;
countb=countb%1000007;
}
l--;
}
printf("%lld\n",count);
}
}