【算法leetcode】2315. 统计星号(rust和go重拳出击)

本文介绍LeetCode第2315题,统计不在竖线对之间的星号数量。题目要求分析字符串中符合条件的星号,并提供了多种编程语言的解题方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


文章目录


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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值