nefu1299 替换字符串

替换字符串

Problem:1299

Time Limit:1000ms

Memory Limit:65535K

Description


给出一个只含 a b 字符的串,问不断将串中的 “ab” 字串替换为 “bba” 至少需要几次可以结束替换。

Input


一个只含 a b 的字符串 S,|S|<=1e6

Output


输出替换的次数,结果对 1e9 + 7 取余

Sample Input


ab
aab

Sample Output


1
3

Hint


对于第一组样例: "ab" → "bba".

对于第二组样例: "aab" → "abba" → "bbaba" → "bbbbaa".



推理发现,对于最后的一个ab,替换成bba后,可以发现他后面有a是没用的,有b才有用,有一个b就替换一次。bbab->bbbba了。

这时候你想对于替换前那最后一个ab,他前面如果有a会怎么样呢,a可以消耗掉那最后一个ab替换后得到所有的b而且产生他两倍的b。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1e6+5;
const int mod=1e9+7;
char s[maxn];
int main()
{
    while(scanf("%s",s)!=-1)
    {
        int len=strlen(s);

        long long ans=0;
        long long anum=0,bnum=0;
        long long sum=0;
        for(int i=len-1;i>=0;i--)
        {
            if(s[i]=='b')bnum++;
            if(s[i]=='a')
            {
                anum++;
                ans+=bnum%mod;
                bnum*=2;
                bnum=bnum%mod;
            }
        }
        ans%=mod;
        printf("%lld\n",ans);
    }
    return 0;
}
<br /><span id="_xhe_temp" width="0" height="0"></span>
</div></div></div>

猜你喜欢

转载自blog.csdn.net/mayuqing98/article/details/79114265