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))
}
![](http://dingyue.ws.126.net/2024/0612/74c226f9j00seyiwk0029d000sg00lcm.jpg)
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()
![](http://dingyue.ws.126.net/2024/0612/0048d1eaj00seyiwk0028d000sg00lcm.jpg)
热门跟贴