【算法笔记】ch01_01_0771 宝石与石头

笔记介绍:

本项目是datawhale发布的LeetCode 算法笔记(Leetcode-Notes)课程完成笔记,根据推荐题目循序渐进练习算法题目。主要用python进行书写相关代码,会介绍解题思路及跑通解法。

0771. 宝石与石头

题目大意

描述:给定一个字符串 jewels 代表石头中宝石的类型,再给定一个字符串 stones 代表你拥有的石头。stones 中每个字符代表了一种你拥有的石头的类型。

要求:计算出拥有的石头中有多少是宝石。

说明

  • 字母区分大小写,因此 aA 是不同类型的石头。
  • 1 ≤ j e w e l s . l e n g t h , s t o n e s . l e n g t h ≤ 50 1 \le jewels.length, stones.length \le 50 1jewels.length,stones.length50
  • jewelsstones 仅由英文字母组成。
  • jewels 中的所有字符都是唯一的。

示例

  • 示例 1:

    输入:jewels = "aA", stones = "aAAbbbb"
    输出:3
    
  • 示例 2:

    输入:jewels = "z", stones = "ZZ"
    输出:0
    

解题思路

我们需要统计字符串 stones 中出现在字符串 jewels 中的字符数量。为了高效地进行统计,我们可以先将 jewels 字符串转换为一个集合 jewelsSet,这样我们可以在 O ( 1 ) O(1) O(1) 的时间复杂度内查询一个字符是否是宝石。然后遍历 stones 字符串,对于每个字符,如果它存在于 jewelsSet 中,就将计数器加一。

解题 Python 代码

def analysis(jewelsSet: list, stones: list):
    return sum(s in jewelsSet for s in stones)

def main():
    # 主要逻辑代码
    input_jewelsSet = list(input('请输入宝石字符集,以空格分隔:').split())
    input_stones = list(input('请输入拥有的石头字符集,以空格分隔:').split())
    print('拥有的宝石数量:', analysis(input_jewelsSet, input_stones))

if __name__ == "__main__":
    main()

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TIM2_CH1_CAPTURE_STA是一个用于记录TIM2通道1输入捕获状态的变量。在使用STM32的输入捕获功能时,我们需要在捕获到边沿信号时记录当前定时器的值,以便后续计算时间差或者频率等信息。TIM2_CH1_CAPTURE_STA通常是一个32位的变量,其中高16位用于记录捕获次数,低16位用于记录捕获状态。具体的定义和使用可以参考以下代码: ```c #define TIM2_CH1_CAPTURE_STA_COUNT 0XFFFF //捕获计数器的最大值 #define TIM2_CH1_CAPTURE_STA_RISING 0X01 //上升沿捕获标志 #define TIM2_CH1_CAPTURE_STA_FALLING 0X02 //下降沿捕获标志 uint32_t TIM2_CH1_CAPTURE_STA = 0; //捕获状态变量 uint32_t TIM2_CH1_CAPTURE_VAL; //捕获值 void TIM2_IRQHandler(void) { if ((TIM2_CH1_CAPTURE_STA & TIM2_CH1_CAPTURE_STA_FALLING) == 0) //还未捕获到下降沿 { if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) //捕获到上升沿 { TIM2_CH1_CAPTURE_STA |= TIM2_CH1_CAPTURE_STA_RISING; //标记上升沿已经被捕获 TIM_SetCounter(TIM2, 0); //清空定时器计数器 TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); //清除中断标志位 } } else //已经捕获到上升沿 { TIM2_CH1_CAPTURE_VAL = TIM_GetCapture1(TIM2); //获取捕获值 TIM2_CH1_CAPTURE_STA |= TIM2_CH1_CAPTURE_STA_FALLING; //标记下降沿已经被捕获 TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); //清除中断标志位 } } int main(void) { //初始化TIM2通道1输入捕获 TIM_ICInitTypeDef TIM2_ICInitStructure; TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM2_ICInitStructure.TIM_ICFilter = 0x00; TIM_ICInit(TIM2, &TIM2_ICInitStructure); //使能TIM2通道1输入捕获中断 TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); //启动TIM2 TIM_Cmd(TIM2, ENABLE); while (1) { if ((TIM2_CH1_CAPTURE_STA & TIM2_CH1_CAPTURE_STA_FALLING) != 0) //已经捕获到下降沿 { uint32_t capture_time = TIM2_CH1_CAPTURE_VAL + TIM2_CH1_CAPTURE_STA_COUNT * TIM_GetCounter(TIM2); //计算捕获时间 uint32_t capture_freq = SystemCoreClock / capture_time; //计算捕获频率 TIM2_CH1_CAPTURE_STA = 0; //清空捕获状态 } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值