【编程题】黑白卡片

链接: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;
	}
}

猜你喜欢

转载自my.oschina.net/MasterLi161307040026/blog/1811080