2024-11-27:字符串的分数。用 go 语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。 请计算并返回字符串 s 的分数。 输入:s = “hello“
2024-11-27:字符串的分数。用 go 语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。
请计算并返回字符串 s 的分数。
输入:s = "hello"。
输出:13。
解释:
s 中字符的 ASCII 码分别为:'h' = 104 ,'e' = 101 ,'l' = 108 ,'o' = 111 。所以 s 的分数为 |104 - 101| + |101 - 108| + |108 - 108| + |108 - 111| = 3 + 7 + 0 + 3 = 13 。
答案 2024-11-27:
题目来自 leetcode3110。
大体步骤如下:
1.输入处理:
我们接收到一个字符串 ( s ),例如输入示例中提供的
"hello"
。
2.初始化分数:
初始化一个计数器,用于存储分数。这个计数器
ans
的初始值为 0。
3 遍历字符串:
3.1.使用一个循环,从字符串的第二个字符(即索引 1)开始遍历到字符串的最后一个字符:
3.1.1.for i := 1; i < len(s); i++
:循环的索引 i
从 1 开始,直到 ( s ) 的长度减 1(即最后一个字符的索引)。
4 计算 ASCII 差值:
4.1.在每次循环中,计算相邻两个字符的 ASCII 码差值的绝对值:
4.1.1.取出当前字符(s[i]
)和前一个字符(s[i-1]
),将这两个字符转换为整数(它们的 ASCII 码值),然后计算它们之间的差值:
4.1.1.abs(int(s[i-1]) - int(s[i]))
:这里 abs
是一个辅助函数,用于计算一个整数的绝对值。
4.1.2.将计算得到的绝对值累加到 ans
中。
5.返回结果:
当循环完成后,
ans
中存储的值就是字符串的分数。使用return
返回该值。
示例计算:
以字符串 s = "hello"
为例:
ASCII 码:
'h' = 104
'e' = 101
'l' = 108
'l' = 108
'o' = 111
计算绝对差值:
|h - e| = |104 - 101| = 3
|e - l| = |101 - 108| = 7
|l - l| = |108 - 108| = 0
|l - o| = |108 - 111| = 3
累加结果:
3 + 7 + 0 + 3 = 13
时间复杂度:
时间复杂度:O(n)。在最坏情况下,需要遍历整个字符串一次,其中 ( n ) 是字符串的长度。因此,时间复杂度是线性的,O(n)。
空间复杂度:
额外空间复杂度:O(1)。在计算过程中,只使用了一个整数变量
ans
来存储结果,不需要使用其他额外的数据结构,因此额外空间复杂度是常数,即 O(1)。
综上所述,所述算法的时间复杂度为 O(n),而空间复杂度为 O(1)。
Go 完整代码如下:
Rust 完整代码如下:
版权声明: 本文为 InfoQ 作者【福大大架构师每日一题】的原创文章。
原文链接:【http://xie.infoq.cn/article/228e2f482709b22e4b99866f1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论