重点方法二!!
小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)
例如: s = "ABAB",那么小易有六种排列的结果:
"AABB","ABAB","ABBA","BAAB","BABA","BBAA"
其中只有"AABB"和"BBAA"满足最多只有一对不同颜色的相邻砖块。
输入描述:
输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s中的每一个字符都为一个大写字母(A到Z)。
方法一:
package caisezhuankuai;
/*
* 分析:
* 一种字符:1
* 两种字符:2
* 多于两种:0
* */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
public class caisezhuankuai {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
line=br.readLine();
if(line.length()>50 || line.length()<0){
System.out.println("输入的字符串长度不符合条件");
}else {
char[] array = line.toCharArray();//将字符串转换为字符数组
//排序
Arrays.sort(array);
//定义计算字符种类数量参数
int count = 1;
for(int i=1;i<array.length;i++) {
if(array[i]!=array[i-1]) {
count++;
}
}
//定义输出结果
int res=1;
if(count==1) {
res=1;
}else if(count==2){
res=2;
}else {
res=0;
}
System.out.println(res);
}
}
方法二:HashSet
注意substring方法
package caisezhuankuai;
import java.util.HashSet;
import java.util.Scanner;
//彩色砖块方法二,利用set集合元素不能重复的特点
public class fangfaer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
HashSet<String> hashset = new HashSet<>();
for(int i=0;i<s.length();i++) {
hashset.add(s.substring(i,i+1));//substring字符串截取。包左不包右
if(hashset.size()>2) {
System.out.println(0);
return;
}
}
System.out.println(hashset.size());//1种字符结果 为1、2中字符结果就为2
}
}