摘要:2025-09-22:字符串的反转度。用go语言,给一个仅包含小写字母的字符串 s。先按字母表的反向给每个字母分配一个数值:a 对应 26,b 对应 25,…,z 对应 1。字符串中第 i(从1开始计数)个字符的“贡献值”就是该字符的反向数值乘以 i。把所有字
2025-09-22:字符串的反转度。用go语言,给一个仅包含小写字母的字符串 s。先按字母表的反向给每个字母分配一个数值:a 对应 26,b 对应 25,…,z 对应 1。字符串中第 i(从1开始计数)个字符的“贡献值”就是该字符的反向数值乘以 i。把所有字符的贡献值相加,得到的总和就是需要返回的结果。
可用的计算公式(用字符的 ASCII 码表示):
对于第 i 个字符 c,其反向数值为 122 - ord(c) + 1 = 123 - ord(c);整个字符串的值为
sum_{i=1..n} i * (123 - ord(s[i]))。
1
s 仅包含小写字母。
输入: s = "abc"。
输出: 148。
反转度是 26 + 50 + 72 = 148 。
题目来自力扣3498。
1. 初始化总和变量:首先初始化一个整数变量ans(在Go代码中作为命名返回值初始化为0),用于累加所有字符的贡献值。
2. 遍历字符串的每个字符:对于字符串s中的每个字符,按照它们在字符串中出现的顺序进行处理(从左到右)。每个字符的位置索引i从0开始(因为编程语言中字符串索引通常从0开始),但在计算时需要转换为从1开始的位置编号。
3. 计算每个字符的反向数值:
• 对于每个字符c,根据题目定义,它在反向字母表中的数值计算为:123 - ord(c)(其中ord(c)表示字符c的ASCII码值)。
• 例如:字符'a'的ASCII码是97,反向数值为123-97=26;字符'b'的ASCII码是98,反向数值为123-98=25;字符'c'的ASCII码是99,反向数值为123-99=24。
4. 计算每个字符的贡献值:
• 每个字符的贡献值 = 反向数值 × 该字符在字符串中的位置(从1开始计数)。
• 具体地,对于索引为i的字符(在代码中循环索引从0开始),其位置编号为i+1。
• 例如:第一个字符(索引0)的位置是1,第二个字符(索引1)的位置是2,第三个字符(索引2)的位置是3。
5. 累加贡献值:将每个字符的贡献值加到总和变量ans中。
6. 返回总和:遍历完所有字符后,返回累加的总和ans作为字符串的反转度。
• 第一个字符'a':反向数值=123-97=26,位置=1,贡献值=26*1=26。
• 第二个字符'b':反向数值=123-98=25,位置=2,贡献值=25*2=50。
• 第三个字符'c':反向数值=123-99=24,位置=3,贡献值=24*3=72。
• 总和=26+50+72=148,与预期输出一致。
• 时间复杂度:O(n),其中n是字符串s的长度。因为需要遍历字符串中的每个字符一次,每个字符的处理(计算反向数值和贡献值)是常数时间操作。
• 额外空间复杂度:O(1)。除了输入字符串和几个基本变量(如循环索引i、总和ans等)外,没有使用额外的数据结构,空间使用是常数级别的。
package mainimport ( "fmt")func reverseDegree(s string) (ans int) { for i, c := range s { ans += int('{'-c) * (i + 1) // 下标从 1 开始 } return}func main { s := "abc" result := reverseDegree(s) fmt.Println(result)}我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。
来源:昊强教育