2024-06-12:用go语言,给定一个下标从 0 开始的字符串 `s`,其中包含用户的输入。 所谓按键变更是指按下与上次按下

2024-08-16 16:39:09 浏览数 (1)

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()

0 人点赞