算法-最少移动次数

问题描述

农场有n只鸡鸭排为一个队伍,鸡用“C”表示,鸭用“D”表示。当鸡鸭挨着时会产生矛盾。需要对所排的队伍进行调整,使鸡鸭各在一边。每次调整只能让相邻的鸡和鸭交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少。例如:CCDCC->CCCDC->CCCCD这样就能使之前的两处鸡鸭相邻变为一处鸡鸭相邻,需要调整队形两次。

输入描述

输入一个长度为N,且只包含C和D的非空字符串。

输出描述

使得最后仅有一对鸡鸭相邻,最少的交换次数

问题分析:
这道题没什么难点,就是考虑能不能知道最有效的移动方式,通过题目分析,最有效的移动方式就两种,要么所有的D都在左边,要么所有的D都在右边,如果所有的D都在左边,则从最左边的D开始向左移,当移动一个D时,下一个D就不需要一道最左边的位置,而是移动最左边的连续D序列的最右位置;同理如果所有的D都向右边移动,则从最右边的D开始向右移动。

代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
   
   
    public static void main(String[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值