相邻字符的交换次数回

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

题目

一个数组中只有两种字符'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;
    }
相关文章
|
12月前
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
56 1
|
5月前
|
算法 测试技术 C#
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
|
5月前
1004.最大连续1的个数
1004.最大连续1的个数
28 0
|
10月前
|
算法 测试技术 C#
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
交换字符串的顺序
当我们想要交换一个字符串的顺序,我们应该怎么做呢,例如“abcdefg”我们要转化为“gfedcba”,那我们来看看下面的代码
leetcode 1047 删除字符串中的所有相邻重复
leetcode 1047 删除字符串中的所有相邻重复
63 0
leetcode 1047 删除字符串中的所有相邻重复
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
80 0