相邻字符的交换次数回

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

题目

一个数组中只有两种字符'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;
    }
相关文章
|
1月前
leetcode代码记录(最长连续递增序列
leetcode代码记录(最长连续递增序列
21 2
|
1月前
1004.最大连续1的个数
1004.最大连续1的个数
17 0
|
1月前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
21 0
交换字符串的顺序
当我们想要交换一个字符串的顺序,我们应该怎么做呢,例如“abcdefg”我们要转化为“gfedcba”,那我们来看看下面的代码
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
|
算法
【Day30】LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]
学习LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]。
98 0
【Day30】LeetCode算法 [769. 最多能完成排序的块 ] [2131. 连接两字母单词得到的最长回文串]
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
给定一个字符串,能否最多删除一段连续的一段使得剩下的为“2020”
71 0
|
算法
【刷算法】调整数组顺序使奇数位于偶数
【刷算法】调整数组顺序使奇数位于偶数