算法leetcode2315. 统计星号(rust和go重拳出击)

Posted 二当家的白帽子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode2315. 统计星号(rust和go重拳出击)相关的知识,希望对你有一定的参考价值。


文章目录


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/ 博客原创~


以上是关于算法leetcode2315. 统计星号(rust和go重拳出击)的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode|2185. 统计包含给定前缀的字符串(rust和go)

算法leetcode|2185. 统计包含给定前缀的字符串(rust和go)

算法leetcode|2185. 统计包含给定前缀的字符串(rust和go)

算法leetcode2176. 统计数组中相等且可以被整除的数对(rust和go重拳出击)

算法leetcode2176. 统计数组中相等且可以被整除的数对(rust和go重拳出击)

算法1684. 统计一致字符串的数目(java / c / c++ / python / go / rust)