农场有n只鸡鸭排为一个队伍,鸡用“C”表示,鸭用“D”表示。当鸡鸭挨着时会产生矛盾。需要对所排的队伍进行调整,使鸡鸭各在一边。每次调整只能让相邻的鸡和鸭交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少。例如:CCDCC->CCCDC->CCCCD这样就能使之前的两处鸡鸭相邻变为一处鸡鸭相邻,需要调整队形两次。
输入一个长度为N,且只包含C和D的非空字符串。
使得最后仅有一对鸡鸭相邻,最少的交换次数
CCDCC
2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
static int minStep = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int costL = 0, costR = 0, n = str.length();
int[] left = new int[n]; // i的左边有多少个C
int[] right = new int[n]; // i的右边有多少个C
for(int i = 1; i < str.length(); i++){
if(str.charAt(i - 1) == 'C'){
left[i] = left[i - 1] + 1;
}else{
left[i] = left[i - 1];
}
if(i >= 2){
if(str.charAt(n - i + 1) == 'C'){
right[n - i] = right[n - i + 1] + 1;
}else{
right[n - i] = right[n - i + 1];
}
}
}
right[0] = str.charAt(1) == 'C'? right[1] + 1: right[1];
for(int i = 0; i < n; i++){
costL += str.charAt(i) == 'D'? left[i]: 0;
costR += str.charAt(i) == 'D'? right[i]: 0;
}
System.out.println(Math.min(costL, costR));
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int countC = 0;
int countD = 0;
int restC = 0;
int restD = 0; //C移到左边,前面有几个D就移动几次
//相反则一样
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == 'C'){
countC++;
restC += countD;
} else {
countD ++;
restD += countC;
}
}
System.out.print(restC<restD? restC:restD);
}
}
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
char[] c=br.readLine().toCharArray();
int n=0;
int sum=0;
for(int i=c.length-1;i>=0;i--){
if(c[i]=='C')
n++;
else
sum+=n;//D后面有多少个C就需要移动多少次
}
System.out.println(sum);
}
} import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(Math.min(move(s,'C'), move(s,'D')));
}
static int move(String s, char c){
int count=0;
int move=0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i)==c){
//若某鸡的下标为i 其左边还有count只鸡 则最少需要i - count次才能将其移到左鸡堆的最右边
move+=i-count;
count++;
}
}
return move;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String input="";
int result=0;
input=scanner.nextLine();
String[] s=input.split("");
int l=0;
for(int i=0;i<s.length;i++){
if(s[i].equals("C")){
result+=i-l;
l++;
}
}
System.out.println(result);
}
}