替换字符串
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".
Source
DT2131
题意:中文题。
思路:将ab换成bba的时候,是把左边的a换到了右边去了,所以当b的左边没有a的时候那么匹配就结束了。
而每一个a可以把一个b变成了两个b。那么进行完了一次这种操作a的右边的b的数量就会翻倍。所以下一次操作的数量就会翻倍。
所以只要从右向左遍历,记录b的数量,当遇到a的时候加上当前b的数量,然后把b的数量就翻倍。跑一遍取模就行了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int mod=1000000007;
char str[1000005];
int main()
{
while(~scanf("%s",str))
{
int len=strlen(str);
long long ans=0;
long long tmp=0;
for(int i=len-1;i>=0;i--)
{
if(str[i]=='b')
{
tmp=(tmp+1)%mod;
}
else
{
ans=(ans+tmp)%mod;
tmp=(tmp*2)%mod;
}
}
printf("%lld\n",ans);
}
return 0;
}