拼多多那一道廣搜的題是真的不會,之後我再看題解補一下吧。時間緊,肯定補上
題目描述
鏈接: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);
}
}
}