3019. 按键变更的次数

给你一个下标从 0 开始的字符串 s ,该字符串由用户输入。按键变更的定义是:使用与上次使用的按键不同的键。例如 s = "ab" 表示按键变更一次,而 s = "bBBb" 不存在按键变更。

返回用户输入过程中按键变更的次数。

注意:shift 或 caps lock 等修饰键不计入按键变更,也就是说,如果用户先输入字母 'a' 然后输入字母 'A' ,不算作按键变更。

示例 1:

输入:s = "aAbBcC"
输出:2
解释: 
从 s[0] = 'a' 到 s[1] = 'A',不存在按键变更,因为不计入 caps lock 或 shift 。
从 s[1] = 'A' 到 s[2] = 'b',按键变更。
从 s[2] = 'b' 到 s[3] = 'B',不存在按键变更,因为不计入 caps lock 或 shift 。
从 s[3] = 'B' 到 s[4] = 'c',按键变更。
从 s[4] = 'c' 到 s[5] = 'C',不存在按键变更,因为不计入 caps lock 或 shift 。

示例 2:

输入:s = "AaAaAaaA"
输出:0
解释: 不存在按键变更,因为这个过程中只按下字母 'a' 和 'A' ,不需要进行按键变更。

提示:

  • 1 <= s.length <= 100
  • s 仅由英文大写字母和小写字母组成。

思路:按键变更是指这次的按键与上次的不同,我们会容易想到一个数据结构:栈,当我们遍历到一个字符,然后与栈顶元素比较一下是否相同,但这道题简化了,我们只需要找上一个字符,上上个字符是什么我们不关心(比如遍历到第三个字符,我们只关心第二个字符是什么,至于第一个字符是什么我们不用考虑),所以我们不用保存字符,所以可以不需要使用栈,可以很简单地就记录一下上一个字符,然后和当前遍历到的字符比较即可。

代码(Python):

class Solution(object):
    def countKeyChanges(self, s):
        result = s[0]                     #初始设为第一个字符
        number = 0                        #记录按键变更的次数
        for i, str in enumerate(s[1:len(s)]):   #从第二个字符开始遍历字符串s
            if result == str or abs(ord(str)-ord(result)) == 32:
               continue                        #如果字符相同或者只是大小写的区别,不计入次数
            else:                              #否则次数+1
               number +=1 
            result = str                  #更新result为 “上一个字符”
        return number
            

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值