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



    文章目录


    2315. 统计星号:

    给你一个字符串 s ,每 两个 连续竖线 '|' 为 一对 。换言之,第一个和第二个 '|' 为一对,第三个和第四个 '|' 为一对,以此类推。

    请你返回 不在 竖线对之间,s'*' 的数目。

    注意,每个竖线 '|' 都会 恰好 属于一个对。

    样例 1:

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

    样例 2:

    输入:
    	s = "iamprogrammer"
    	
    输出:
    	0
    	
    解释:
    	在这个例子中,s 中没有星号。所以返回 0 。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    样例 3:

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

    提示:

    • 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
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    原题传送门:https://leetcode.cn/problems/count-asterisks/


    非常感谢你阅读本文~
    欢迎【点赞】【收藏】【评论】~
    放弃不难,但坚持一定很酷~
    希望我们大家都能每天进步一点点~
    本文由 :https://le-yi.blog.csdn.net/ 博客原创~


    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    websocket多实例推送解决方案-数据实时展示
    【数学建模学习笔记【集训十天】之第四天】
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    vscode远程ssh服务器且更改服务器别名
    解决注册Kaggle出现的“Captcha must be filled out”问题
    商用短链平台_第4章_功能需求介绍和微服务拆分讲解
    centos搭建http服务器
    线性代数的本质(七)——特征值和特征向量
    c++高精度乘法
    ddddocr1.4.8失效的解决方法
  • 原文地址:https://blog.csdn.net/m0_67400972/article/details/126080817