题目 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;
};
- 暴力遍历统计:
- 由于符号 “|” 都是成对出现的,可以定义两个变量,一个用于保存有效符号 “*” 的,一个保存符号 “|” 的
- 通过判断当前符号 “|” 的个数是奇数还是偶数来判断符号 “*” 是否有效
- 如果当前符号是 “*” ,并且当前的符号 “|” 个数是偶数,那么是有效的符号,计入总数中
- 最后遍历完成返回统计后的结果
结果
- 遍历统计