拼多多那一道广搜的题是真的不会,之后我再看题解补一下吧。时间紧,肯定补上
题目描述
链接: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);
}
}
}