代码编织梦想

统计星号

难度:简单

给你一个字符串 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 。

模拟

思路:

根据题意,需要统计第偶数个竖线之后,第奇数个竖线之前,以及第一个竖线之前和最后一个竖线之后的星号。可以用一个布尔值 valid \textit{valid} valid 表示接下去遇到的星号是否要纳入统计,初始化为 true \text{true} true,并且每次遇到竖线都要取反,最后返回符合条件的星号数量即可。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n s s s 的长度。只需要遍历 s s s 一遍。
  • 空间复杂度: O ( 1 ) O(1) O(1)。仅需要常数空间。
class Solution:
    def countAsterisks(self, s: str) -> int:
        res, state = 0, True
        for i in s:
            if i == "|":
                state = not state
            elif i == "*" and state:
                res += 1
        return res

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-asterisks

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45616285/article/details/128845636

《剑指offer》刷题打卡第4天-爱代码爱编程

算法和数据操作: 算法考查:排序和查找是算法考查的重点。二分查找、归并排序和快速排序。 如果我们需要重复的多次计算相同的问题,则通常可以选择用递归或者循环两种不同的方法。 递归是在一个函数的内部调用这个函数自身。而循环则是通

【leetcode】算法刷题汇总_小朱小朱绝不服输的博客-爱代码爱编程

本篇总结的就是刷题过程中遇到的经典题目,以及对应的数据结构算法的学习。 如果想按照数据结构进行刷题,可以参考:150道基础算法分类总结(2022) 1. leetcode算法题 序号链接类别1【Leetcode】并查集(Union-Find)算法并查集2【Leetcode】区间问题求解:重叠区间,合并区间,删除区间区间问题3【Leetcode】BFS

算法刷题路线总结与相关资料分享_刷题算法学习流程-爱代码爱编程

算法刷题路线总结与相关资料分享 前言一、算法刷题路线总结二、算法题刷题步骤三、基础数据结构知识汇总1、时间复杂度2、空间复杂度3、线性表4、栈与队列5、树 四、基础算法知识汇总1、递归2、多指针算法3、动