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

相关推荐
雨出7 分钟前
算法学习第十七天:LRU缓存与布隆过滤器
学习·算法·缓存
oioihoii43 分钟前
深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置
java·算法·c++20
MobiCetus1 小时前
如何一键安装所有Python项目的依赖!
开发语言·jvm·c++·人工智能·python·算法·机器学习
思麟呀1 小时前
String类的模拟实现
开发语言·c++·算法
Dante7982 小时前
判断质数及其优化方法
开发语言·c++·算法
ylfhpy2 小时前
Java面试黄金宝典19
java·开发语言·数据结构·算法·面试·面经
不知名。。。。。。。。2 小时前
C++———— Vector
c++·算法·vector
姜威鱼2 小时前
蓝桥杯python编程每日刷题 day 20
数据结构·算法·蓝桥杯
longlong int3 小时前
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
算法·贪心算法
张琪杭3 小时前
python算法:leetcode二叉树相关算法题
python·算法·leetcode·职场和发展