zoukankan      html  css  js  c++  java
  • 360 ab串

    1. 题目

    小明得到一个只包含a,b两个字符的字符串,但是小明不希望在这个字符串里a出现在b左边。现在他可以将”ab”这样的子串替换成”bba”,在原串中的相对位置不变。输出小明最少需要操作多少次才能让一个给定字符串所有a都在b的右边。(牛客网:https://acm.nowcoder.com/questionTerminal/3d8b7e706ca9429eacd6c405713ba11d)。若有侵权,还请告知,立即撤回。

    2. 输入输出描述

    输入描述:一个只包含a,b两个字符的字符串,长度不超过100000。

    输出描述:最小的操作次数。结果对1000000007取模。

    3. 样例

    样例1:

    样例输入:ab
    样例输出:1
    解释:ab到bba

    样例2:

    样例输入:aab
    样例输出:3
    解释:aab到abba到bbaba到bbbbaa

    4. 题解

    其实这道题教会了我考虑的时候不要总是固执的从前往后考虑,可以扩展思维,从后往前考虑。

    从后往前找,找a出现的位置,找到后,a往后移动,因为每移动一次都会制造出一个b,所以count*2。

    5. 实现

    public class n1 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String s = scanner.nextLine();
            int n = s.length();
            long count = 0;
            long ans = 0;
            for(int i = n - 1; i >= 0; i--) {
                if(s.charAt(i) == 'b') count++;
                else {
                    ans = (ans + count) % 1000000007;
                    count = (count * 2) % 1000000007; // 不懂为什么要 * 2
                }
            }
            System.out.println(ans);
        }
    }

    6. 结语

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

      如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

    但行好事 莫问前程
  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/haifwu/p/15017553.html
Copyright © 2011-2022 走看看