首页 > 编程语言 >前端算法小白日刷三题10

前端算法小白日刷三题10

时间:2024-12-14 10:59:03浏览次数:8  
标签:10 console log currentLength solution 白日 let const 刷三题

今天的内容主要是复习 ,第一题会有点难,可以从后往前看,循序渐进

第一题先来做一下青训营的题目:括号匹配策略 

function solution(s) {
    const n = s.length;
    if (n % 2 !== 0) return -1; 
    const ls = ['()', '[]', '{}', '<>'];
    const f = Array.from({ length: n }, () => Array(n).fill(Number.MAX_VALUE));

    function value(cl, cr) {
        let k = 2; 
        for (const [dl, dr] of ls) {
            k = Math.min(k, (cl !== dl ? 1 : 0) + (cr !== dr ? 1 : 0)); 
        }
        return k;
    }

    
    for (let i = 0; i < n - 1; i++) {
        f[i][i + 1] = value(s[i], s[i + 1]);
    }

    
    for (let m = 4; m <= n; m += 2) {
        for (let l = 0; l <= n - m; l++) {
            let r = l + m - 1;
            f[l][r] = f[l + 1][r - 1] + value(s[l], s[r]);
            for (let k = l; k < r; k++) {
                f[l][r] = Math.min(f[l][r], f[l][k] + f[k + 1][r]); 
            }
        }
    }

    return f[0][n - 1]; 
}


console.log(solution("[(]}") === 2);  
console.log(solution("<{[]}>") === 0); 
console.log(solution("<>>{(})]") === 3); 
  • 这题做的我真的要破防了,写了一个半小时,思路我就不说了,我是参考了别人的python代码改的,思路勉强理顺了,本来是下面的解法,但是一直显示错误
function solution(s) {
    const stack = [];
    let num = 0;
    const match = {
        '>': '<',
        ')': '(',
        ']': '[',
        '}': '{'
    };

    for (let item of s) {
        if (item === '<' || item === '(' || item === '[' || item === '{') {
            stack.push(item);
        } else {
            if (stack.length === 0) {
                num++; // 对应的左括号缺失
            } else {
                let end = stack.pop();
                if (match[item] !== end) {
                    num++; // 括号不匹配,需要修改
                }
            }
        }
    }

    // 返回栈中剩余的左括号和不匹配的括号总数
    return stack.length + num; 
}

function main() {
    console.log(solution("[()]") === 2); // 示例1
    console.log(solution("<<[]>>") === 0); // 示例2
    console.log(solution("<>{()}") === 3); // 示例3
}

main();

第二题还是青训营:组成字符串ku的最大次数

 

function solution(s) {
    // write code here
    s = s.toLowerCase();
    const map = new Map([['k', 0], ['u', 0]])
    for (let item of s) {
        if (map.has(item) && (item == 'k' || item == 'u')) {
            map.set(item, map.get(item) + 1)
        } 
    }
    return Math.min(map.get('k'), map.get('u'));
}

function main() {
    console.log(solution("AUBTMKAxfuu") === 1);
    console.log(solution("KKuuUuUuKKKKkkkkKK") === 6);
    console.log(solution("abcdefgh") === 0);
}

main();
  •  这题里面比较巧妙的地方就是我先将字符串全部变成小写,这样子统计就方便很多
  • 这题是关于哈希表的

最后一题双指针:最长的神奇序列

function solution(inp) {
    // Edit your code here
    let maxLength = 0;
    let maxStart = 0;
    let currentLength = 1;
    let currentStart = 0;

    for (let i = 1; i < inp.length; i++) {
        if (inp[i] !== inp[i - 1]) {
            currentLength++;
        } else {
            if (currentLength >= 3) {
                if (currentLength > maxLength) {
                    maxLength = currentLength;
                    maxStart = currentStart;
                }
            }
            currentLength = 1;
            currentStart = i;
        }
    }

    // Check the last segment
    if (currentLength >= 3 && currentLength > maxLength) {
        maxLength = currentLength;
        maxStart = currentStart;
    }

    return inp.substring(maxStart, maxStart + maxLength);
}

function main() {
    // Add your test cases here
    console.log(solution("0101011101") === "010101");
    console.log(solution("1110101010000") === "10101010");
    console.log(solution("1010101010101010") === "1010101010101010");
}

main();

 非常开心哈,前几天就发现青训营可以提交js的代码了

今天就练习到这里啦

 

标签:10,console,log,currentLength,solution,白日,let,const,刷三题
From: https://blog.csdn.net/2301_80195301/article/details/144432349

相关文章

  • NKOJ 2107 【并查集】可爱的猴子
    NKOJ2107【并查集】可爱的猴子思路:普通并查集+图的遍历更新答案实现方法首先使用时光倒流思想解决删边的问题。注意提前把没有删过的边提前建上。接着用一个图记录猴子之间的拉手关系,每次要更新答案时都遍历与当前节点连着的节点将其答案更新,只有在\(1\)号节点与当前节......
  • NKOJ 2110 美丽的星空
    NKOJ2110美丽的星空思路洪水填充(BFS)+多边形全等的判定。实现方法这道题比较复杂,分为三个步骤。用BFS求出有哪些星座并编号。两两判全等。多边形的全等判定定理:如果两多边形每两个点之间的距离和相等,则它们全等。如果两个多边形全等,就将新的打上旧的的标记。......
  • 写一个布局,它的宽度是不固定的100%,如何让它的宽度始终是高度的一半呢?
    要实现一个宽度为高度一半的布局,并且宽度还要是100%不固定,你可以使用CSS中的aspect-ratio属性。这个属性允许你指定一个元素的宽高比。以下是一个简单的示例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width......
  • 2.10、列表操作
    2.10、列表过滤2.10.1、回顾filterletarr=[1,2,3,4,5,6,7,8,9]//filter不会破坏原数组的结构,会生成一个全新的数组。letnewArr=arr.filter((num)=>{//return过滤规则returnnum<5})console.log(newArr)2.10.2、列表过滤watch属性实现<body><......
  • springboot高校学生技能成长档案管理系统-计算机设计毕业源码71080
    目 录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2 高校学生技能成长档案管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据......
  • 利用ESP-01S中继实现STM32F103C8T6与MQTT服务器的串口双向通信
    最终现象未完待续实现流程STM32通过串口与ESP通信,ESP通过WiFi与MQTT服务器通信元件与接线STM32相关STM32F103C8T6开发板:STM32仿真器:烧录程序时,STM32F103C8T6与仿真器的接下如下:STM32ST-LINK3V33.3VGNDGNDSWDIOSWDIOSWCLKSWCLKUSB转TTL:未完待......
  • 代码随想录训练营第十六天| 513. 找树左下角的值 112. 路径总和 106.从中序与后序遍历
    513.找树左下角的值 题目链接:513.找树左下角的值-力扣(LeetCode)讲解链接:代码随想录 求最后一行最后一个左子节点的值就是求二叉树深度最大的叶子节点递归:确定递归函数的参数和返回值参数必须有要遍历的树的根节点,还有就是一个int型的变量用来记录最长深度。这里......
  • 软件质量评估模型ISO/IEC 25010:2011
    不定期发布软件开发、测试,学习内容、开发经验。更多内容可访问作者官网 主页|嗨我在这儿 点点关注不迷路!!!本文参考连接国际软件质量评价标准ISO/IEC25010:2011对软件质量的评估有着极为重要的意义,它在ISO/IEC9126质量模型的基础上进行了优化与拓展,精准地描述了8......
  • ToB企业常用获客渠道有哪些?分享10个你不得不知道的获客渠道
    TOB企业获客最令人难以置信的4个真相:电销是快速获取商机的方法,前提是升级电销有效性。这个我后面会说。比起销售技巧,更重要的是你能不能打入那个行业的圈子。你真正销售的,其实并不是产品,而是人情和信任。对于非目标客户,不要犹豫,忘记沉默成本。把时间花在对的客户身上。在当......
  • P10370 「LAOI-4」Mex Tower (Hard ver.) 题解
    有一定难度的思维题。题目传送门思路首先,\(\operatorname{mex}(x,y)\)的结果一定为\(0,1,2\),因为只有两个数,所以结果最多为\(2\)(\(x=1,y=0\)或\(x=0,y=1\)时)。因此,可以将问题转化为最后的数是否为\(2\)。考虑倒推,当\(n=1\)时,显然只能为\(2\);要从\(n=2\)的情况变为......