输入描述:
输入一个字符串,字符串中包含了全量字符集和已占用字符集,两个字符集用@相连。@前的字符集合为全量字符集,@后的字符集为已占用字符集合。已占用字符集中的字符一定是全量字符集中的字符。字符集中的字符跟字符之间使用英文逗号分隔。字符集中的字符表示为字符加数字,字符跟数字使用英文冒号分隔,比如a:1,表示1个a字符。字符只考虑英文字母,区分大小写,数字只考虑正整形,数量不超过100,如果一个字符都没被占用,@标识符仍在,例如a:3,b:5,c:2@
输出描述:
可用字符集。输出带回车换行。
示例1:
输入:a:3,b:5,c:2@a:1,b:2
输出:a:2,b:3,c:2
说明:全量字符集为3个a,5个b,2个c。已占用字符集为1个a,2个b。由于已占用字符集不能再使用,因此,剩余可用字符为2个a,3个b,2个c。因此输出a:2,b:3,c:2。注意,输出的字符顺序要跟输入一致。不能输出b:3,a:2,c:2。如果某个字符已全被占用,不需要输出。例如a:3,b:5,c:2@a:3,b:2,输出为b:3,c:2。
做出这道题,ES6中的Map可谓功不可没,另外模板字符串也使得我在将map转为字符串时顺风顺水,哈哈哈~·
var str = "a:3,b:5,c:2@a:1,b:2"
function getAlreadyUsed (str) {
var firstStr = str.slice(0, str.indexOf('@'));
var firstArr = firstStr.split(',')
var lastStr = str.slice(str.indexOf('@')+1);
var lastArr = lastStr.split(',');
// 存储全量
var map1 = new Map()
// 存储已占用
var map2 = new Map()
for(let key of firstArr) {
map1.set(key[0], key[2])
}
for(l

本文介绍了一道华为笔试题,题目要求处理全量字符集与已占用字符集。输入是一个字符串,包含全量字符集和已占用字符集,两者以@分隔。字符集由字符和对应的计数组成,例如a:1表示1个a。输出为可用字符集,即减去已占用的字符后的剩余字符及其数量。示例输入为a:3,b:5,c:2@a:1,b:2,输出为a:2,b:3,c:2。解决此问题时,JavaScript的Map和模板字符串发挥了重要作用。"
123568809,12555208,中国休闲食品行业现状:安全健康趋势凸显,"['食品行业', '市场分析', '消费升级', '健康食品', '电商销售']


被折叠的 条评论
为什么被折叠?



