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);
        }

    }
}

发布了32 篇原创文章 · 获赞 6 · 访问量 894

猜你喜欢

转载自blog.csdn.net/EEEEEEcho/article/details/104241063