问题描述
农场有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[