LeetCode 3019.按键变更的次数:遍历(转小写)

【LetMeFly】3019.按键变更的次数:遍历(转小写)

力扣题目链接:https://leetcode.cn/problems/number-of-changing-keys/

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

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

注意: shiftcaps 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 仅由英文大写字母和小写字母组成。

解题方法:遍历

从第二个字符开始遍历字符串,如果当前字符串的小写和前一个字符的小写不相同,则答案数量加一。

  • 时间复杂度 O ( l e n ( s ) ) O(len(s)) O(len(s))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @Author: LetMeFly
 * @Date: 2025-01-07 13:03:56
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-01-07 13:08:37
 */
class Solution {
public:
    int countKeyChanges(string& s) {
        int ans = 0;
        for (int i = 1; i < s.size(); i++) {
            ans += tolower(s[i]) != tolower(s[i - 1]);
        }
        return ans;
    }
};
Python
python 复制代码
'''
Author: LetMeFly
Date: 2025-01-07 13:09:14
LastEditors: LetMeFly.xyz
LastEditTime: 2025-01-07 13:09:43
'''
class Solution:
    def countKeyChanges(self, s: str) -> int:
        return sum(s[i].lower() != s[i - 1].lower() for i in range(1, len(s)))
Java
java 复制代码
/*
 * @Author: LetMeFly
 * @Date: 2025-01-07 13:10:05
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-01-07 13:11:25
 */
class Solution {
    public int countKeyChanges(String s) {
        int ans = 0;
        for (int i = 1; i < s.length(); i++) {
            if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(i - 1))) {
                ans++;
            }
        }
        return ans;
    }
}
Go
go 复制代码
/*
 * @Author: LetMeFly
 * @Date: 2025-01-07 13:11:57
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-01-07 13:13:25
 */
package main
import "strings"

func countKeyChanges(s string) (ans int) {
    for i := 1; i < len(s); i++ {
        if strings.ToLower(string(s[i])) != strings.ToLower(string(s[i - 1])) {
            ans++
        }
    }
    return
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/144983704

相关推荐
爱研究的小陈20 分钟前
Day 3:数学基础回顾——线性代数与概率论在AI中的核心作用
算法
渭雨轻尘_学习计算机ing23 分钟前
二叉树的最大宽度计算
算法·面试
BB_CC_DD1 小时前
四. 以Annoy算法建树的方式聚类清洗图像数据集,一次建树,无限次聚类搜索,提升聚类搜索效率。(附完整代码)
深度学习·算法·聚类
梁下轻语的秋缘2 小时前
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
c++·算法·蓝桥杯
CODE_RabbitV2 小时前
【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)
算法
mit6.8243 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify3 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
shix .3 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法
风铃儿~3 小时前
Java面试高频问题(26-28)
java·算法·面试
wuqingshun3141593 小时前
蓝桥杯 4. 卡片换位
算法·职场和发展·蓝桥杯