分享课练习题

844.比较含退格的字符串

  1. 给定 s t 两个字符串,当它们分别被输入到空白的文本编辑器后,请你判断二者是否相等。# 代表退格字符。
  2. 如果相等,返回 true ;否则,返回 false
  3. 注意:如果对空文本输入退格字符,文本继续为空。
  4. 示例 1
  5. 输入:s = "ab#c", t = "ad#c"
  6. 输出:true
  7. 解释:S T 都会变成 ac”。
  8. 示例 2
  9. 输入:s = "ab##", t = "c#d#"
  10. 输出:true
  11. 解释:s t 都会变成 “”。
  12. 示例 3
  13. 输入:s = "a##c", t = "#a#c"
  14. 输出:true
  15. 解释:s t 都会变成 c”。
  16. 示例 4
  17. 输入:s = "a#c", t = "b"
  18. 输出:false
  19. 解释:s 会变成 c”,但 t 仍然是 b”。
  20. 提示:
  21. 1 <= s.length, t.length <= 200
  22. s t 只含有小写字母以及字符 '#'
  23. 进阶:
  24. 你可以用 O(N) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?
  25. 来源:力扣(LeetCode
  26. 链接:https://leetcode-cn.com/problems/backspace-string-compare
  27. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

自己的写法

var backspaceCompare = function(s, t) {
    const arr1 = [], arr2 = [];
    const len1 = s.length, len2 = t.length;
    let i = 0, j = 0;
    while (i < len1) {
        if (s[i] != '#') {
            arr1.push(s[i]);
        }else {
            arr1.pop();
        }
        i++;
    }
    while (j < len2) {
        if (t[j] != '#') {
            arr2.push(t[j]);
        }else {
            arr2.pop();
        }
        j++;
    }

    s = arr1.join('');
    t = arr2.join('');
    return s === t;
};

682.棒球比赛

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:

整数 x - 表示本回合新获得分数 x
"+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
"D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
"C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
请你返回记录中所有得分的总和。



示例 1:

输入:ops = ["5","2","C","D","+"]
输出:30
解释:
"5" - 记录加 5 ,记录现在是 [5]
"2" - 记录加 2 ,记录现在是 [5, 2]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].
"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30
示例 2:

输入:ops = ["5","-2","4","C","D","9","+","+"]
输出:27
解释:
"5" - 记录加 5 ,记录现在是 [5]
"-2" - 记录加 -2 ,记录现在是 [5, -2]
"4" - 记录加 4 ,记录现在是 [5, -2, 4]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5, -2]
"D" - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]
"9" - 记录加 9 ,记录现在是 [5, -2, -4, 9]
"+" - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]
"+" - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]
所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27
示例 3:

输入:ops = ["1"]
输出:1


提示:

1 <= ops.length <= 1000
ops[i] 为 "C"、"D"、"+",或者一个表示整数的字符串。整数范围是 [-3 * 104, 3 * 104]
对于 "+" 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
对于 "C" 和 "D" 操作,题目数据保证记录此操作时前面总是存在一个有效的分数

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/baseball-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

自己的写法

var calPoints = function(ops) {
    const arr = [];
    for (let i = 0, len = ops.length; i < len; i++){
        let o = ops[i];

        switch (o) {
            case 'C':
                arr.pop();
                break;
            case 'D':
                const d = parseInt(arr[arr.length - 1])
                arr.push(d * 2);
                break;
            case '+':
                const j = parseInt(arr[arr.length - 1]);
                const a = parseInt(arr[arr.length - 2]);
                arr.push(j + a);
                break;
            default:
                arr.push(parseInt(o))
                break;
        }
        console.log(arr)
    }
    return arr.reduce((total, item) => (total + item))
};

1249.移除无效的括号

给你一个由 '('、')' 和小写字母组成的字符串 s。

你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。

请返回任意一个合法字符串。

有效「括号字符串」应当符合以下 任意一条 要求:

空字符串或只包含小写字母的字符串
可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」


示例 1:

输入:s = "lee(t(c)o)de)"
输出:"lee(t(c)o)de"
解释:"lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。
示例 2:

输入:s = "a)b(c)d"
输出:"ab(c)d"
示例 3:

输入:s = "))(("
输出:""
解释:空字符串也是有效的
示例 4:

输入:s = "(a(b(c)d)"
输出:"a(b(c)d)"


提示:

1 <= s.length <= 10^5
s[i] 可能是 '('、')' 或英文小写字母

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。