JS 华为od机试题 字符占用

该文章介绍了一个JavaScript函数,用于处理两个字符集合:全量字符集和已占用字符集。函数通过Map数据结构存储集合,遍历并更新已占用字符集在全量字符集中对应的数量,最后输出剩余可用字符集。示例代码展示了如何处理输入字符串并输出结果。

描述:

给到两个字符集合,一个是全量字符集,一个是已占用字符集,求输出剩余可用字符集。

输入描述:

输入一串字符串,一定包含@,@前为全量字符集,@后为已占用字符集,已占用字符集一定是全量字符集中的字符

输入实例  'a:3,b:5,c:2@a:1,b:2'

输出剩余可用字符集如:'a:2,b:3,c:2'

若某个字符已全部占用,则不需要再输出


先用两个数组分别接收全量字符集和已占用字符集

再用map结构接收如 'a':'3' 的两个字符集

遍历已占用字符集,在全量字符集找到对应的进行减法

最后转换成数组,过滤变成0的输出


本文记录本人的撰写内容,若有不足之处,请指教。

        let STR = 'a:3,b:5,c:2@a:1,b:2,c:2'
        function strOccupy(str){
            // 全量字符集full,已占用字符集occpy
            // [a:3,b:5,c:2],[a:1,b:2]
            // 对象接收{} 循环对比
            let full = new Map()
            let occupy = new Map()
            let full0 = str.split('@')[0].split(',') //['a:3','b:5','c:2']
            let occupy0 = str.split('@')[1].split(',')
            full0.map(value=>{
                let attr = value.split(':')
                full.set(attr[0],parseInt(attr[1]))  // 键值对结构 { key : value,... }
            })
            occupy0.map(value=>{
                let attr = value.split(':')
                occupy.set(attr[0],parseInt(attr[1]))
            })
            for(let key of occupy.keys()){
                if(full.has(key)){  // full内有occupy的key,说明被占用
                    full.set(key, full.get(key) - occupy.get(key)) 
                }
            }
            let rest = Array.from(full)  //类数组转换成数组
            let out = []
            rest.forEach(value=>{  //直接改变数组
                if(value[1]!=0){
                    value = value[0] + ':' + value[1]
                    out.push(value)
                }
            })
            console.log(out.join(','));
        }
        strOccupy(STR)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值