一道面试题的简单思考
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-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南