相邻字符的交换次数回

简介: 相邻字符的交换次数回

题目

一个数组中只有两种字符'G'和’B’,
可以让所有的G都放在左侧,所有的B都放在右侧
但是只能在相邻字符之间进行交换操作,
返回至少需要交换几次

一、暴力

image.png
尝试让每一个G都跑到0位置
让2位置来到0位置,第一种选择,让3位置的G来到0位置,让6,7,8位置的G来到0位置,让每个G都来到0位置接下来,你让每个G都来到1位置,再让每个G都来到2位置,一个彻底的暴力尝试类似于全排列的一个尝试代码

二、贪心

没有任何必要后面的G需要跑到前面的G的前面
两个指针index:往右扫,不是G就往右飘
L:如果发现了放到哪儿的位置

代码

    public static int minSteps1(String s) {
        if (s == null || s.equals("")) {
            return 0;
        }
        char[] str = s.toCharArray();
        int step1 = 0;
        int gi = 0;
        for (int i = 0; i < str.length; i++) {
            if (str[i] == 'G') {
                step1 += i - (gi++);
            }
        }
        return step1;
    }
相关文章
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
交换字符串的顺序
当我们想要交换一个字符串的顺序,我们应该怎么做呢,例如“abcdefg”我们要转化为“gfedcba”,那我们来看看下面的代码
leetcode 1047 删除字符串中的所有相邻重复
leetcode 1047 删除字符串中的所有相邻重复
65 0
leetcode 1047 删除字符串中的所有相邻重复
|
人工智能
【scanf】将一串整数,依次左移一个数,且原来的第一个数移到最后,原来多执行的一步在这里!
【scanf】将一串整数,依次左移一个数,且原来的第一个数移到最后,原来多执行的一步在这里!
84 0
【scanf】将一串整数,依次左移一个数,且原来的第一个数移到最后,原来多执行的一步在这里!
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法
【Day30】LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]
学习LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]。
117 0
【Day30】LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
110 0
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
84 0
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)
104 0
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)
|
算法
【刷算法】调整数组顺序使奇数位于偶数
【刷算法】调整数组顺序使奇数位于偶数