一道面试题的简单思考
2021/7/27 23:10:29
本文主要是介绍一道面试题的简单思考,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/**
- 根据表达式计算字母数
- 说明:
- 给定一个描述字母数量的表达式,计算表达式里的每个字母实际数量
- 表达式格式:
- 字母紧跟表示次数的数字,如 A2B3
- 括号可将表达式局部分组后跟上数字,(A2)2B
- 数字为1时可缺省,如 AB3。
- 示例:
- countOfLetters('A2B3'); // { A: 2, B: 3 }
- countOfLetters('A(A3B)2'); // { A: 7, B: 2 }
- countOfLetters('C4(A(A3B)2)2'); // { A: 14, B: 4, C: 4 }
*/
function multipleToken(tokenStr, multiple) { return `${tokenStr.substr(0,1)}${tokenStr.substr(1)*multiple}` } // tokens array function flatToken(tokens) { const flatToken = [] function isOverFlag(str) { return /\)/.test(str) } for (let i = 0; i < tokens.length; i++) { if (isOverFlag(tokens[i])) { let newToken = [] let popToken = flatToken.pop() while (popToken != '(') { newToken.push(multipleToken(popToken, tokens[i].substr(1))) popToken = flatToken.pop() } flatToken.push(...newToken) } else { flatToken.push(tokens[i]) } } return flatToken } function getValueFromFlatToken(flatToken) { const obj = {} flatToken.forEach((item) => { if (!obj[item.substr(0, 1)]) obj[item.substr(0, 1)] = 0 obj[item.substr(0, 1)] += (+item.substr(1) || 1) }) return obj } function prase(str) { const tokens = [] let tokenStr = '' function emitToken() { if (tokenStr) { if (tokenStr.length == 1) tokenStr += '1' tokens.push(tokenStr) tokenStr = '' } } for (let i = 0; i < str.length; i++) { const letter = str.substr(i, 1) if (letter == '(') { emitToken() tokens.push('(') continue } if (letter == ')') { emitToken() tokenStr += letter continue } const isLetter = (s) => !/[^A-Za-z]/.test(s) if (isLetter(letter)) { emitToken() tokenStr += letter continue } tokenStr += letter } emitToken() return tokens } function countOfLetters(letters) { // prase // flatToken // getValueFromFlatToken return getValueFromFlatToken(flatToken(prase(letters))) }
这篇关于一道面试题的简单思考的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?