2315. 统计星号(新年第一摸)

127 阅读2分钟

题目 leetcode.cn/

  • 给你一个字符串 s ,每 两个 连续竖线 '|' 为 一对 。换言之,第一个和第二个 '|' 为一对,第三个和第四个 '|' 为一对,以此类推。
  • 请你返回 不在 竖线对之间,s 中 '*' 的数目。
  • 注意,每个竖线 '|' 都会 恰好 属于一个对。

示例

  • 示例 1:

    • 输入: s = "l|eet|c**o|*de|"
    • 输出: 2
    • 解释: 不在竖线对之间的字符加粗加斜体后,得到字符串:"l|eet|c**o|*de|" 。第一和第二条竖线'|' 之间的字符不计入答案。同时,第三条和第四条竖线 '|' 之间的字符也不计入答案。不在竖线对之间总共有 2 个星号,所以我们返回 2 。
  • 示例 2:

    • 输入: s = "iamprogrammer"
    • 输出: 0
    • 解释: 在这个例子中,s 中没有星号。所以返回 0 。
  • 示例 3:

    • 输入: s = "yo|uar|e**|b|e***au|tifu|l"
    • 输出: 5
    • 解释: 需要考虑的字符加粗加斜体后:"yo|uar|e**|b|e***au|tifu|l"。不在竖线对之间总共有 5星号。所以我们返回 5 。

提示

  • 1 <= s.length <= 1000
  • s 只包含小写英文字母,竖线 '|' 和星号 '*' 。
  • s 包含 偶数 个竖线 '|' 。

代码

function countAsterisks(s: string): number {
    let sum = 0;
    let line = 0;
    for(let i = 0; i < s.length; i++){
        if(s[i] === '|'){
            line++;
        }else if(s[i] === '*' && line % 2 === 0 ){
            sum++;
        }
    }
    return sum;
};
  • 暴力遍历统计:
    • 由于符号 “|” 都是成对出现的,可以定义两个变量,一个用于保存有效符号 “*” 的,一个保存符号 “|” 的
    • 通过判断当前符号 “|” 的个数是奇数还是偶数来判断符号 “*” 是否有效
    • 如果当前符号是 “*” ,并且当前的符号 “|” 个数是偶数,那么是有效的符号,计入总数中
    • 最后遍历完成返回统计后的结果

结果

  • 遍历统计

image.png