彩色的砖块

    xiaoxiao2022-07-14  200

    题目描述

    小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。) 例如: s = “ABAB”,那么小易有六种排列的结果: “AABB”,“ABAB”,“ABBA”,“BAAB”,“BABA”,“BBAA” 其中只有"AABB"和"BBAA"满足最多只有一对不同颜色的相邻砖块。

    输入描述

    输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s中的每一个字符都为一个大写字母(A到Z)。

    输出描述

    输出一个整数,表示小易可以有多少种方式。

    输入

    ABAB

    输出

    2

    题目链接:

    https://www.nowcoder.com/questionTerminal/35086420bf464fedb5c0c1859982ae87?orderByHotValue=1&mutiTagIds=149&page=1&onlyReference=false 来源:牛客网

    解题思路

    在审题时,我们看到题目要求——最多存在一对不同颜色的相邻砖块,那么对于所有满足题意的可能就只有两种——1.砖块颜色全部一样; 2.砖块只能有两种不同颜色,所以想到一种简单的方法——模仿哈希表

    #include <iostream> #include <string> using namespace std; int main() { int cur=0; int res = 0; int hash[256] = {0}; string str; cin >> str; //最多存在一对不同颜色的相邻砖块,那么字符串中有超过两种不同的字符就绝对不行 for(int i=0;i<str.size();i++) { if(hash[str[i]] == 0) cur++; hash[str[i]]++; } if(cur == 1) res = cur; if(cur == 2) res = cur; cout << res <<endl; return 0; }
    最新回复(0)