Loading

周赛题练习-easy模块

2315. 统计星号

解题思路

本题的题意是计算每两|之外的*数目,例如*|**ac|*,返回2个,即首尾的*

方法一

  1. 直接使用String.spit()函数按|对字符串拆分成字符串数组(注意正则表达式转义字符的坑)
  2. 下标为偶数的在框内,奇数的在框外,依次计数即可

时间复杂度O(n)

空间复杂度O(n)

class Solution {
    public int countAsterisks(String s) {
        int res = 0;
        String[] strs = s.split("\\|");
        for (int i = 0; i < strs.length; i++) {
            if (i % 2 == 0) {
                for (char c : strs[i].toCharArray()) {
                    if (c == '*') {
                        res++;
                    }
                }
            }
        }
        return res;
    }
}

方法二

  1. 直接遍历字符进行计数,初始化变量pairNum,表示为每一对|的计数变量
  2. *|*|*可知,当pairNum=0可对*计数
  3. pairNum=1时,把*的计数累加到res,计数变量置0
  4. pairNum=2时,即一对|满了,将pairNum置0

时间复杂度O(n)

空间复杂度O(1)

class Solution {
    public int countAsterisks(String s) {
        int pairNum = 0;
        int res = 0;
        int temp = 0;
        for (char c : s.toCharArray()) {
            if (c == '|') {
                pairNum++;
            } else if (c == '*' && (pairNum == 0)) {
                temp++;
            }
            if (pairNum == 2) {
                pairNum = 0;

            } else if (pairNum == 1) {
                res += temp;
                temp = 0;
            }
        }
        return res + temp;
    }
}
posted @ 2022-07-10 22:55  LogBiao  阅读(34)  评论(0编辑  收藏  举报