首页 > 试题广场 >

彩色的砖块

[编程题]彩色的砖块
  • 热度指数:641 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)
例如: s = "ABAB",那么小易有六种排列的结果:
"AABB","ABAB","ABBA","BAAB","BABA","BBAA"
其中只有"AABB"和"BBAA"满足最多只有一对不同颜色的相邻砖块。

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


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

输入

ABAB

输出

2

思路

字符串转成数组,然后利用Set去重,查看剩下几个元素,1个就1中,2个就2中,其他就是0.

代码

let arr;
while(lines=readline()){
    arr=lines;
}
arr=arr.split("");
let size=new Set(arr).size;
console.log(size==2?2:size==1?1:0)
发表于 2019-08-02 15:36:51 回复(0)
更多回答
/*
一个颜色有一种
两个颜色有两种
超过两个没有种
*/ var a = readline().split(""); var len = Array.from(new Set(a)).length; print(len<=2?len:0);

发表于 2018-07-12 14:56:05 回复(0)
//本题关键点在于有多少个异色,而不是字符串长度。
var lines = readline().split('');
 var arr = [];
 for (var i = 0; i < lines.length; i++) {
    var cur = lines[i];
    // 等价于数组的去重
    if (arr.indexOf(cur) === -1)
        arr.push(cur);
}

// 一旦达到3个数字了,必定就不止1个异色了
if (arr.length > 2) { 
    print(0);
} else if (arr.length === 2) {
    print(2);
} else {
    print(1);
}
编辑于 2018-07-18 10:06:39 回复(0)
计算一共有多少种颜色,如果1种返回1,2种返回2,超过两种颜色则至少有2个相邻不同颜色的砖块,不符合要求,返回0
发表于 2018-05-29 19:36:09 回复(0)
let s=readline();
const arr=s.split("");
const stack=[];//创建用于存放颜色种类的栈
let result;//完美砖块的个数
for(let i=0;i<arr.length;i++){
    if(!stack.includes(arr[i])){//如果stack中没有arr[i]这种颜色,就入栈,用数组的includes方法判断包不包含某元素
        stack.push(arr[i])
    }
}
//通过判断stack的数组长度,判断s中有几种颜色,对应完美砖块的情况
//s中有1种颜色,完美砖块的情况只有1种,如AAAAAA
//s中有2种颜色,完美砖块的情况有2种,如AAABBB,BBBAAA
//s中的颜色超过2种,没有完美砖块的情况,如AAABBC
if(stack.length==1){
    result=1;
}else if(stack.length==2){
    result=2;
}else{
    result=0;
}

console.log(result);

发表于 2022-04-03 14:57:52 回复(0)
**首先将字符串中的单个字符取出组成list x
i=0
x=[]
for i in range(0,len(s)):
    if i<len(s):
        x.append(s[i])
        i+=i
    else:
        break
**第二步 将list x 转换成 set,set中只留唯一不相同的字符,
**所以set的长度相当于有几种颜色,一种颜色 一种方式,两种颜色两种,两种以上没有。
ss=set(x)
if len(ss)==1:
    print (1)
elif len(ss)==2:
    print (2)
else:
    print (0)


发表于 2019-08-03 02:49:59 回复(0)
var str=readline();
function catagory(str){
        var s={};
        var count=0;
        var len=str.length;
        for(var i=0;i<len;i++){
            if(!s[str[i]]){
                s[str[i]]=1;
                count++;
            }
        }
        if(count==1){
            return1;
        }
        if(count==2){
            return2;
        }else{
            return0;
        }
    }
    console.log(catagory(str))
发表于 2019-08-02 21:40:12 回复(0)
哎 我算法一点都不会  链接:https://www.nowcoder.com/questionTerminal/d613d974cfdf422992146480c0ff8e79
来源:牛客网
var getPerfectArranges = function(str) {
    if(typeof str !=="string") return0;
    var strArray = str.split("");
    // 出现了多少个不同字母
    var letters = {};
    strArray.forEach(o => {
        if(letters[o] === undefined) {
            letters[o] =1;
        }else{
            letters[o] ++;
        }
    })
    var letterCount = Object.keys(letters).length;
    if(letterCount ===1)return1;
    if(letterCount ===2)return2;
    if(letterCount >2)return0;
}
 
getPerfectArranges("ABAB")
发表于 2019-08-02 16:07:12 回复(0)

import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] ch = s.toCharArray();
Set set = new HashSet();
for (int i = 0; i < ch.length; i++) {
set.add(ch[i]);
}
int size = set.size();
if(size == 2){
System.out.println("2");
}else if (size == 1) {
System.out.println("1");
}else {
System.out.println("0");
}

}

}

发表于 2018-08-10 14:34:22 回复(0)
请问这种题,JavaScript的怎么获得输入啊???
发表于 2018-06-28 14:29:21 回复(0)
var lines=readline().split('');
var arr=[];
for(var i=0;i<lines.length;i++)
{
    var item=lines[i];
    if(arr.indexOf(item)==-1)
        arr.push(item);
}
if(arr.length>2)
    print(0);
else if(arr.length==2)
    print(2);
else
    print(1);

发表于 2018-06-20 10:09:23 回复(0)
// a -> 1
// ab -> 2
// aa -> 1
// abab -> 2
// aab -> 2 => aab baa
// abc -> 0 => 出现多于两个字母的情况,一定为 0

var getPerfectArranges = function(str) {
    if(typeof str !== "string") return0;
    var strArray = str.split("");
    // 出现了多少个不同字母
    var letters = {};
    strArray.forEach(o => {
        if(letters[o] === undefined) {
            letters[o] = 1;
        } else{
            letters[o] ++;
        }
    })
    var letterCount = Object.keys(letters).length;
    if(letterCount === 1) return 1;
    if(letterCount === 2) return 2;
    if(letterCount > 2) return 0;
}

getPerfectArranges("ABAB")
发表于 2018-06-01 17:04:31 回复(1)