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(len(s))$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
* @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

1
2
3
4
5
6
7
8
9
'''
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
* @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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
* @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


3019.按键变更的次数
https://blog.letmefly.xyz/2025/01/07/LeetCode 3019.按键变更的次数/
作者
Tisfy
发布于
2025年1月7日
许可协议