相邻字符的交换次数回

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

题目

一个数组中只有两种字符'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;
    }
相关文章
|
4月前
1004.最大连续1的个数
1004.最大连续1的个数
26 0
|
4月前
|
算法 Java C++
动态求连续区间和
动态求连续区间和
29 0
|
4月前
leetcode-777:在LR字符串中交换相邻字符
leetcode-777:在LR字符串中交换相邻字符
42 0
交换字符串的顺序
当我们想要交换一个字符串的顺序,我们应该怎么做呢,例如“abcdefg”我们要转化为“gfedcba”,那我们来看看下面的代码
leetcode 1047 删除字符串中的所有相邻重复
leetcode 1047 删除字符串中的所有相邻重复
60 0
leetcode 1047 删除字符串中的所有相邻重复
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
78 0
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)
98 0
滑动窗口__最长不含重复字符的子符串_和为S的连续正整数序列(剑指offer)