小明得到一个只包含a,b两个字符的字符串,但是小明不希望在这个字符串里a出现在b左边。现在他可以将”ab”这样的子串替换成”bba”,在原串中的相对位置不变。输出小明最少需要操作多少次才能让一个给定字符串所有a都在b的右边

输入描述:

一个只包含a,b字符的字符串,长度不超过100000。

输出描述:

最小的操作次数。结果对1000000007取模。

输入例子1:

ab

输出例子1:

1

例子说明1:

ab到bba

输入例子2:

aab

输出例子2:

3

例子说明2:

aab到abba到bbaba到bbbbaa

示例代码:

s = input()
tmp = 0
ret = 0
for i in range(len(s)-1, -1, -1):if s[i] == 'b':tmp += 1else:ret = ret + tmptmp = tmp * 2
print(ret % 1000000007)

思路解析:

从后往前遍历字符串,遍历的过程中我们记录一下当前位置及其右边所有字符中b的个数:

(1)遇到b字符其计数就自增1;

(2)遇到a字符就进行一次逻辑上的“替换”操作。

遇到a的时候相当于遇到了一次ab子串,这时候将其“替换”为bba就会使得b字符增加一个。因此,替换操作的次数只与b字符的数量相关,替换一次,就增加一个b,所以操作数每次加上b的个数即可。而此时将a移动到了右边去,可能右边还会存在ab子串,因此右边还需要继续进行替换操作。

在向右替换的过程中,这个a字符需要不断地通过替换操作向右传递,直到自己的右边已经全部是a,这时候它已经经过了之前右边所有的b字符,而每经过一次b字符,就因为替换操作使得b字符增加一个,因此当它无法再往右边移动时,总共使得右边b字符的数量翻了一番。

ab串(要求a在b的右面)相关推荐

  1. 并发执行变成串行_一篇讲透如何理解数据库并发控制(纯干货)

    1.数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务.数据库提供了增删改查等几种基础操作,用户可以灵活地组合这几种操作,实现复杂的语义.在很多场景下,用户希望一组操作可以做 ...

  2. 并发执行变成串行_一篇讲透如何理解数据库并发控制

    01数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务.数据库提供了增删改查等几种基础操作,用户可以灵活地组合这几种操作,实现复杂的语义.在很多场景下,用户希望一组操作可以做 ...

  3. QDUOJ 河老师的新年礼物(尺取法)

    河老师的新年礼物 发布时间: 2017年1月1日 15:11   最后更新: 2017年1月1日 15:13   时间限制: 1000ms   内存限制: 256M 描述 河老师的新年礼物是一个长度为 ...

  4. 正则表达式:(mysql)REGEXP

    检索列prod_name包含文本1000的所以行 SELECT prod_name FROM  products WHERE prod_name REGEXP '1000' ORDER BY prod ...

  5. python 求子字符串_(6)KMP算法(求子串的位置)______字符串的匹配

    问题: 已知字符串 B 是字符串 A 的一个子串,问字符串 B 在字符串 A 的第一次出现位置. 暴力方法:从 A 字符串 的每个位置开始对字符串 B 进行匹配. 这种方法根据数据的不同 复杂度不同最 ...

  6. 一篇讲透如何理解数据库并发控制

    01数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务.数据库提供了增删改查等几种基础操作,用户可以灵活地组合这几种操作,实现复杂的语义.在很多场景下,用户希望一组操作可以做 ...

  7. codeforce 804B Minimum number of steps

    cf劲啊 原题: We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each ...

  8. python判断网页密码加密方式_Python模拟网页中javascript加密与验证的相关处理

    在做网络爬虫的过程中你是否一些在这方面做的很好的网站,你向知道他是通过哪些相关的操作做出这么好的网站,以下就是文章的相关内容的具体介绍,希望你浏览完下面的内容会有所收获.Python模拟网页的java ...

  9. KMP算法详解P3375 【模板】KMP字符串匹配题解

    KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...

最新文章

  1. c语言弟弟的作业,教弟弟做作业作文500字
  2. Markdown编辑器editor.md的使用
  3. phpstudy升级mysql之后,修改配置文件无效的问题
  4. python测试之道进阶,Pytest-Mock 进阶用法详解
  5. linux lanmp 安装教程,linux服务器一键安装包lanmp系列教程之一
  6. 类文件到虚拟机(类加载机制)
  7. 开发中为什么使用线程池的原因
  8. Command ‘ifconfig‘ not found
  9. open-falcon_NASA在Falcon 9上带回了蠕虫-其背后的故事是什么?
  10. 汇编语言(三十五)之输入字符串以$结束然后输出字母个数
  11. [react] 如何更新组件的状态?
  12. linhaifeng fullstack
  13. linux 线程_Linux 多线程编程(不限Linux)
  14. QA专题阅读小组 | 每周一起读 #09
  15. 用matlab求解信号的DFT,利用MATLAB实现信号DFT的计算
  16. java 中时间的比较 用compareTo方法
  17. 软件测试中的缺陷分析与管理
  18. java keytool 下载_常用的Java Keytool Keystore命令
  19. 一步步破解app协议第二步(审计代码)
  20. 【虚拟机/UBunTu】VMBox下UBunTu扩容磁盘

热门文章

  1. “香山”处理器产生背后的逻辑
  2. 打造数字原生引擎,易捷行云EasyStack发布新一代全栈信创云
  3. 伯克利新无监督强化学习方法:减少混沌所产生的突现行为
  4. 华科提出目标检测新方法:基于IoU-aware的定位改进,简单又有效
  5. “重构”黑洞:26岁MIT研究生的新算法 | 人物志
  6. 那个大战AlphaGo的柯洁,将免试入读清华大学工商管理专业
  7. 60行代码爬取知乎“神回复”,句句戳中泪点
  8. 从技术角度分析“抢票软件的加速”有多快?
  9. 首部高中《人工智能基础》教材问世,40家中学引入
  10. 入门深度学习,但你知道哪些情况下不该使用深度学习吗?