2024-06-12:用go语言,给定一个下标从 0 开始的字符串 s
,其中包含用户的输入。
所谓按键变更是指按下与上次按下的键不同的键。
举例来说,如果 s = "ab"
,表示发生了一次按键变更;
而对于 s = "bBBb"
,则没有发生按键变更。
要求计算用户输入过程中按键发生变更的次数。
需要注意的是,shift 键或 caps lock 键等修饰键不算作按键变更。
换句话说,如果用户先按下字母 'a',然后再按下字母 'A',不算作按键变更。
输入:s = "aAbBcC"。
输出:2。
答案2024-06-12:
chatgpt
题目来自leetcode3019。
大体步骤如下:
1.定义 countKeyChanges
函数,该函数接受一个字符串 s
作为输入,并返回按键发生变更的次数。初始化 ans
为 0,用于记录变更次数。
2.在 main
函数中,定义字符串 s
为 "aAbBcC"。这个字符串代表了用户的输入序列。
3.在 countKeyChanges
函数中,使用循环遍历字符串 s
。从下标 1 开始,逐个比较前一个字符和当前字符是否属于不同的键。
4.对于每个索引 i
,如果该索引的字符(s[i]
)和前一个字符(s[i-1]
)不属于相同的字符(在按大写转为小写后比较),则将变更次数 ans
增加 1。
5.返回变更次数 ans
。
总的时间复杂度:
- • 遍历字符串
s
需要 O(n) 的时间复杂度,其中n
为字符串的长度。
总的额外空间复杂度:
- • 在该算法中,除了函数返回值之外,并没有使用额外的空间来存储数据。因此,额外空间复杂度为 O(1)。
Go完整代码如下:
代码语言:javascript复制package main
import "fmt"
func countKeyChanges(s string) (ans int) {
for i := 1; i < len(s); i {
if s[i-1]&31 != s[i]&31 {
ans
}
}
return
}
func main() {
s:= "aAbBcC"
fmt.Println(countKeyChanges(s))
}
Python完整代码如下:
代码语言:javascript复制# -*-coding:utf-8-*-
def count_key_changes(s):
ans = 0
for i in range(1, len(s)):
if ord(s[i - 1]) & 31 != ord(s[i]) & 31:
ans = 1
return ans
def main():
s = "aAbBcC"
print(count_key_changes(s))
if __name__ == "__main__":
main()