农场有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); } }