文章目录
- 2315. 统计星号:
- 样例 1:
- 样例 2:
- 样例 3:
- 提示:
- 分析
- 题解
- 原题传送门:https://leetcode.cn/problems/count-asterisks/
2315. 统计星号:
给你一个字符串 s
,每 两个 连续竖线 '|'
为 一对 。换言之,第一个和第二个 '|'
为一对,第三个和第四个 '|'
为一对,以此类推。
请你返回 不在 竖线对之间,s
中 '*'
的数目。
注意,每个竖线 '|'
都会 恰好 属于一个对。
样例 1:
输入:
s = "l|*e*et|c**o|*de|"
输出:
2
解释:
不在竖线对之间的字符加粗加斜体后,得到字符串:"l|*e*et|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 包含 偶数 个竖线 ‘|’ 。
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 看起来就是有条件的统计星号数量。
- 可以直接遍历字符计数。
- 也可以考虑用正则表达式。
- 还可以将字符串按照竖线分割,然后隔一组统计。
题解
rust
impl Solution {
pub fn count_asterisks(s: String) -> i32 {
let mut ans = 0;
let mut isCalc = true;
s.as_bytes().iter().for_each(|&c| {
match c as char {
'*' => {
if isCalc {
ans += 1;
}
}
'|' => {
isCalc = !isCalc;
}
_ => {}
}
});
ans
}
}
go
func countAsterisks(s string) int {
ans := 0
isCalc := true
for _, c := range s {
switch c {
case '*':
if isCalc {
ans++
}
case '|':
isCalc = !isCalc
}
}
return ans
}
typescript
function countAsterisks(s: string): number {
let ans = 0;
let isCalc = true;
for (const c of s) {
switch (c) {
case '*':
if (isCalc) {
++ans;
}
break;
case '|':
isCalc = !isCalc;
break;
}
}
return ans;
};
python
class Solution:
def countAsterisks(self, s: str) -> int:
ans = 0
is_calc = True
for c in s:
if c == '*':
if is_calc:
ans += 1
elif c == '|':
is_calc = not is_calc
return ans
c
int countAsterisks(char * s){
int ans = 0;
bool isCalc = true;
while (*s) {
switch (*s) {
case '*':
if (isCalc) {
++ans;
}
break;
case '|':
isCalc = !isCalc;
break;
}
++s;
}
return ans;
}
c++
class Solution {
public:
int countAsterisks(string s) {
int ans = 0;
bool isCalc = true;
for (auto c: s) {
switch (c) {
case '*':
if (isCalc) {
++ans;
}
break;
case '|':
isCalc = !isCalc;
break;
}
}
return ans;
}
};
java
class Solution {
public int countAsterisks(String s) {
int ans = 0;
boolean isCalc = true;
for (char c : s.toCharArray()) {
switch (c) {
case '*':
if (isCalc) {
++ans;
}
break;
case '|':
isCalc = !isCalc;
break;
}
}
return ans;
}
}
原题传送门:https://leetcode.cn/problems/count-asterisks/
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 :https://le-yi.blog.csdn.net/ 博客原创~
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦