nefu1299 替换字符串

这是一个关于字符串处理的编程问题,题目编号为1299。要求在给定的时间和内存限制内,对输入的字符串进行特定操作并输出结果。题目提供了描述、输入格式、输出格式以及样例输入和输出,提示部分可能包含了解题关键。

替换字符串

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值