题解 | #括号区间匹配#

括号区间匹配

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];
}

全部评论

相关推荐

头像
02-26 13:58
门头沟学院 Java
北城_阿亮:把八股背一背,包装一下实习经历项目经历,要是有心思考证就考一考,然后把别人的项目爬到自己github上,包装到简历里,什么三个月?一个月!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务