题干:已知一个字符串是由正整数和加减乘除四个运算符(+_*%)组成,如:'11+2-3*4+5/2*4+10/5',现需要将高优先级运算,用小括号包裹起来,例结果为:'11+2-(3*4)+(5/2*4)+(10/5)'
思路:
1.将目标字符串以普通运算符(+、-)分割成数组
2.根据数组的每一个元素是否含有高级运算符(*、%)来判断是否加以括号包裹该元素
3.将数组以拆分符拼接成数组
js实现:
function formatOperaStr(str) {
let commonOperaQueue = []
let rst = []
if (str.includes('+')) {
commonOperaQueue.push('+')
rst = str.split('+')
} else if (str.includes('-')) {
commonOperaQueue.push('-')
rst = str.split('-')
}
if (rst.length > 0) {
commonOperaQueue.push('-')
return rst
.map((item) => {
let newItem = item.includes('-') ? item.split('-') : item
if (Array.isArray(newItem) && newItem.length > 0) {
newItem = newItem
.map((childItem) => {
return childItem.includes('*') || childItem.includes('%')
? `(${childItem})`
: childItem
})
.join(commonOperaQueue[1])
}
return !newItem.includes('-') &&
(newItem.includes('*') || newItem.includes('%'))
? `(${newItem})`
: newItem
})
.join(commonOperaQueue[0])
} else {
return str
}
}