Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi biểu thức toán học str làm đối số duy nhất. Nhiệm vụ của hàm là xóa dấu ngoặc khỏi biểu thức nhưng giữ nguyên các phép toán và toán hạng.
Ví dụ, nếu đầu vào là:
Đầu vào
const str = 'u-(v-w-(x+y))-z';
Đầu ra
const output = 'u-v+w+x+y-z';
Ví dụ
Dưới đây là mã thực hiện:
const str = 'u-(v-w-(x+y))-z';
const removeParentheses = (str = '') => {
let stack = [];
let lastSign = '+';
for (let char of str) {
if (char === '(' || char === ')') {
lastSign = stack[stack.length - 1] || '+';
} else if (char === '+') {
if (stack[stack.length - 1] !== '-' && stack[stack.length - 1] !== '+') {
stack.push(lastSign);
}
} else if (char === '-') {
if (lastSign === '-') {
if (stack[stack.length - 1] === '-') stack.pop();
stack.push('+');
} else {
if (stack[stack.length - 1] === '+') stack.pop();
stack.push('-');
}
} else {
stack.push(char);
}
}
return stack.join('').replace(/^\+/, '');
};
console.log(removeParentheses(str));
Kết quả
u-v+w+x+y-z