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

相关推荐
Yzzz-F1 小时前
Problem - 2205D - Codeforces
算法
智者知已应修善业2 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn2 小时前
Java Set集合相关知识点
java·开发语言·算法
生成论实验室3 小时前
《事件关系阴阳博弈动力学:识势应势之道》第四篇:降U动力学——认知确定度的自驱演化
人工智能·科技·神经网络·算法·架构
AI科技星3 小时前
全域数学·72分册:场计算机卷【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
科研前沿4 小时前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨4 小时前
1931. 用三种不同颜色为网格涂色
算法·leetcode
晨曦夜月4 小时前
map与unordered_map区别
算法·哈希算法
图码5 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler015 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法