链接:https://www.nowcoder.com/questionTerminal/bfb60fce32974c45a806e567e17183ba
来源:牛客网
牛牛有n张卡片排成一个序列.每张卡片一面是黑色的,另一面是白色的。初始状态的时候有些卡片是黑色朝上,有些卡片是白色朝上。牛牛现在想要把一些卡片翻过来,得到一种交替排列的形式,即每对相邻卡片的颜色都是不一样的。牛牛想知道最少需要翻转多少张卡片可以变成交替排列的形式。
输入描述:
输入包括一个字符串S,字符串长度length(3 ≤ length ≤ 50),其中只包含'W'和'B'两种字符串,分别表示白色和黑色。整个字符串表示卡片序列的初始状态。
输出描述:
输出一个整数,表示牛牛最少需要翻转的次数。
示例1
输入
BBBW
输出
1
解题思路:从后往前逐个排查字符,如果i和i-1相等,则替换,继续从i-1排查。
此时,分两种情况:最后一位字符翻转;最后一位字符不翻转。比较两种情况的较小值。
package BiShiTi;
import java.util.Scanner;
public class m_0006 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String strSeq = scan.nextLine();
int minTimes = getMinExchangeTimes(strSeq);
System.out.println(minTimes);
}
static int getMinExchangeTimes(String strSeq){
int strLen = strSeq.length();
// 从后往前排查,最后一位不翻转
int mayLen1 = 0;
String strSeq1 = strSeq;
for (int i = strLen - 1; i >= 1; i--) {
if (strSeq1.charAt(i) == strSeq1.charAt(i-1)) {
mayLen1 += 1;
if (strSeq1.charAt(i-1) == 'W') {
String proSubStr = strSeq1.substring(0, i-1);
String nxtSubStr = strSeq1.substring(i, strLen);
strSeq1 = proSubStr + String.valueOf('B') + nxtSubStr;
}else{
String proSubStr = strSeq1.substring(0, i-1);
String nxtSubStr = strSeq1.substring(i, strLen);
strSeq1 = proSubStr + String.valueOf('W') + nxtSubStr;
}
}
}
// 从后往前排查,最后一位翻转
int mayLen2 = 0;
String strSeq2 = strSeq;
if (strSeq2.charAt(strLen-1) == 'W') {
String proSubStr = strSeq2.substring(0, strLen-1);
strSeq2 = proSubStr + String.valueOf('B');
mayLen2 += 1;
}else{
String proSubStr = strSeq2.substring(0, strLen-1);
strSeq2 = proSubStr + String.valueOf('W');
mayLen2 += 1;
}
for (int i = strLen - 1; i >= 1; i--) {
if (strSeq2.charAt(i) == strSeq2.charAt(i-1)) {
mayLen2 += 1;
if (strSeq2.charAt(i-1) == 'W') {
String proSubStr = strSeq2.substring(0, i-1);
String nxtSubStr = strSeq2.substring(i, strLen);
strSeq2 = proSubStr + String.valueOf('B') + nxtSubStr;
}else{
String proSubStr = strSeq2.substring(0, i-1);
String nxtSubStr = strSeq2.substring(i, strLen);
strSeq2 = proSubStr + String.valueOf('W') + nxtSubStr;
}
}
}
return mayLen1 > mayLen2 ? mayLen2:mayLen1;
}
}