2018校招真題編程題(網易)彩色的磚塊

拼多多那一道廣搜的題是真的不會,之後我再看題解補一下吧。時間緊,肯定補上

題目描述

鏈接:https://www.nowcoder.com/questionTerminal/8c29f4d1bea84d6ba2847e079b7420f7?toCommentId=5259650
來源:牛客網

小易有一些彩色的磚塊。每種顏色由一個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有一個給定的字符串s,s中每個字符代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。(如果兩種方式所對應的磚塊顏色序列是相同的,那麼認爲這兩種方式是一樣的。)
例如: s = “ABAB”,那麼小易有六種排列的結果:
“AABB”,“ABAB”,“ABBA”,“BAAB”,“BABA”,“BBAA”
其中只有"AABB"和"BBAA"滿足最多隻有一對不同顏色的相鄰磚塊。

輸入描述:

輸入包括一個字符串s,字符串s的長度length(1 ≤ length ≤ 50),s中的每一個字符都爲一個大寫字母(A到Z)。

輸出描述:

輸出一個整數,表示小易可以有多少種方式。

示例

輸入
ABAB
輸出
2

import java.util.HashSet;
import java.util.Scanner;

public class ColorfulBlocks {
    /**
     * 小易有一些彩色的磚塊。每種顏色由一個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有一個給定的字符串s,
     * s中每個字符代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。
     * 如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。
     * 請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。
     * (如果兩種方式所對應的磚塊顏色序列是相同的,那麼認爲這兩種方式是一樣的。)
     * 例如: s = "ABAB",那麼小易有六種排列的結果:
     * "AABB","ABAB","ABBA","BAAB","BABA","BBAA"
     * 其中只有"AABB"和"BBAA"滿足最多隻有一對不同顏色的相鄰磚塊。
     */
    public static void main(String[] args) {
        /**
         * 來吧 算法核心思想:
         * 這是算法嗎?!!!!!!!
         * 這是一道水題,想太多了朋友們,如果輸入的字母數量大於了2 那肯定就不會出現最多隻有一對不同顏色磚塊相鄰的情況
         * 所以將輸入的字符串轉換成字符數組,然後放到集合裏去重,
         * 如果去重的結果大於2 那肯定就是不行 輸出0
         * 如果去重結果爲2 ,那麼就有兩種情況,正着排和倒着排
         * 如果去重結果爲1,那麼就僅有一種情況了,就正着排
         */
        Scanner input = new Scanner(System.in);
        String s = input.next();
        HashSet<Character> hashSet = new HashSet<Character>();
        for(Character c:s.toCharArray()){
            hashSet.add(c);
        }

        if(hashSet.size() ==2){
            System.out.println(2);
        }
        else if(hashSet.size() == 1){
            System.out.println(1);
        }
        else{
            System.out.println(0);
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章