首页 > 其他 > 详细

字符串

时间:2021-06-11 10:52:07      阅读:20      评论:0      收藏:0      [点我收藏+]

持续更新ing!

 

本博客刷题题目来源于github上一位大佬给出的题目, 因为相关JS版本的解法比较少,因此在这给出JS版本的题目答案,附刷题目录链接:https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E6%95%B0%E7%BB%84%E4%B8%8E%E7%9F%A9%E9%98%B5.md.....   题目不限于给出的刷题目录,多增加了本人在刷题过程中遇到的典型题

 

20 有效括号

给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true
 

提示:

1 <= s.length <= 104
s 仅由括号 ‘()[]{}‘ 组成

 

思路:使用栈来存放右括号,遍历字符串     步骤如下:

1.创建一个Map,把括号匹配放进去

2.创建一个Stack(array) ,用for循环遍历字符串,对于每一个字符,如果map里有这个key,那说明它是个左括号,从map里取得相应的右括号(为什么?),把它push进stack里,否则的话,它就是右括号,需要pop出栈顶字符然后看它是否等于当前的字符,如果不相符,则返回false

3.循环结束后,如果stack不为空,说明还剩一些左括号没有被闭合,返回false.否则返回true

var isValid = function(s) {
        // 创建括号配对关系
        const mappings = new Map();
        mappings.set(‘(‘,‘)‘);
        mappings.set(‘[‘,‘]‘);
        mappings.set(‘{‘,‘}‘);

        const stack = [];
        for(let i=0;i<s.length;i++){
            // 若当前字符对应mappings里的左括号,则push进去对应的右括号
            if(mappings.has(s[i])){
                stack.push(mappings.get(s[i]));
            // 若为右括号,则pop出来并与当前字符比较,若相等就什么都不做,不相等返回false
            }else{
                if(stack.pop()!=s[i]){
                    return false;
                }
            }
        }

        // 遍历完之后若stack中不为空,说明有的左括号没有被闭合,返回false
        if(stack.length!==0){
            return false;
        }
        // 若不为空,返回true
        return true;
    };

 

 

415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

 

提示:

num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

 

思路: 使用双指针来模拟人工计算,步骤如下:

1. 创建指针 i 指向 nums1 末位数字,j 指向 nums2末位数字。
2. i, j 数字相加,用进位就用 carry 来记录进位值,无则为 0。
3. 若产生进位,则当前数字为 (i+j)%10 的值。
4. 若遍历过程中,nums1 或 nums2 当前已无数字,则用 0 补位来计算。

var addStrings = function(num1, num2) {
    let i=num1.length-1,
        j=num2.length-1,
        carry=0,
        ans=[];
    while(i>=0 || j>=0 || carry!==0){
        let c1 = i>=0?num1.charAt(i)-‘0‘:0,
            c2 = j>=0?num2.charAt(j)-‘0‘:0;
        let sum = c1+c2+carry;
        ans.push(sum%10);
        carry=Math.floor(sum/10);
        i--;
        j--;
    }
    return ans.reverse().join(‘‘);
};

 

字符串

原文:https://www.cnblogs.com/starboy13/p/14873310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!