2024-06-12:用go语言,给定一个下标从 0 开始的字符串,其中包含用户的输入。

s

所谓按键变更是指按下与上次按下的键不同的键。

举例来说,如果,表示发生了一次按键变更;

s = "ab"

而对于,则没有发生按键变更。

s = "bBBb"

要求计算用户输入过程中按键发生变更的次数。

需要注意的是,shift 键或 caps lock 键等修饰键不算作按键变更。

换句话说,如果用户先按下字母 'a',然后再按下字母 'A',不算作按键变更。

输入:s = "aAbBcC"。

输出:2。

答案2024-06-12:

chatgpt

题目来自leetcode3019。

大体步骤如下:

1.定义函数,该函数接受一个字符串作为输入,并返回按键发生变更的次数。初始化为 0,用于记录变更次数。

countKeyChanges

s

ans

2.在函数中,定义字符串为 "aAbBcC"。这个字符串代表了用户的输入序列。

main

s

3.在函数中,使用循环遍历字符串。从下标 1 开始,逐个比较前一个字符和当前字符是否属于不同的键。

countKeyChanges

s

4.对于每个索引,如果该索引的字符()和前一个字符()不属于相同的字符(在按大写转为小写后比较),则将变更次数增加 1。

i

s[i]

s[i-1]

ans

5.返回变更次数。

ans

总的时间复杂度:

  • •遍历字符串需要 O(n) 的时间复杂度,其中为字符串的长度。
  • s
  • n

总的额外空间复杂度:

  • •在该算法中,除了函数返回值之外,并没有使用额外的空间来存储数据。因此,额外空间复杂度为 O(1)。

Go完整代码如下:

packagemain
import"fmt"
funccountKeyChanges(sstring)(ansint){
fori:=1;iifs[i-1]&31!=s[i]&31{
ans++
}
}
return
}
funcmain(){
s:="aAbBcC"
fmt.Println(countKeyChanges(s))
}

打开网易新闻 查看精彩图片

Python完整代码如下:

#-*-coding:utf-8-*-
defcount_key_changes(s):
ans=0
foriinrange(1,len(s)):
iford(s[i-1])&31!=ord(s[i])&31:
ans+=1
returnans
defmain():
s="aAbBcC"
print(count_key_changes(s))
if__name__=="__main__":
main()

打开网易新闻 查看精彩图片