题解 | #括号区间匹配#
括号区间匹配
https://www.nowcoder.com/practice/e391767d80d942d29e6095a935a5b96b
JavaScript题解,ACM模式,之前刷到过差不多的题
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
match(line)
}
})();
function match(s) {
if (s.length <= 1) {
return 1;
}
const sArr = s.split("");
let dp = new Array(s.length)
.fill(Array(s.length).fill(-Infinity))
.map((val, idx) => {
return val.map((el, _idx) => {
if (idx === _idx) {
return 1;
} else if (_idx > idx) {
return -el;
} else {
return null;
}
});
});
// console.log(dp);
for (let i = 1; i < s.length; i++) {
for (let j = 0; j < s.length - i; j++) {
if (
(sArr[j] === "(" && sArr[j + i] === ")") ||
(sArr[j] === "[" && sArr[j + i] === "]")
) {
dp[j][j + i] = Math.min(dp[j][j + i], dp[j + 1][j + i - 1]);
}
for (let k = j; k < j + i; k++) {
dp[j][j + i] = Math.min(
dp[j][j + i],
dp[j][k] + dp[k + 1][i + j]
);
}
}
}
// console.log(dp);
console.log(dp[0][s.length - 1])
return dp[0][s.length - 1];
}
查看14道真题和解析