首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2025-09-22:字符串的反转度。用go语言,给一个仅包含小写字母的字符串 s。先按字母表的反向给每个字母分配一个数值:a

2025-09-22:字符串的反转度。用go语言,给一个仅包含小写字母的字符串 s。先按字母表的反向给每个字母分配一个数值:a

作者头像
福大大架构师每日一题
发布2025-12-18 11:45:03
发布2025-12-18 11:45:03
1900
举报

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.length <= 1000。

s 仅包含小写字母。

输入: s = "abc"。

输出: 148。

解释:

字母

反转字母表中的位置

字符串中的位置

乘积

'a'

26

1

26

'b'

25

2

50

'c'

24

3

72

反转度是 26 + 50 + 72 = 148 。

题目来自力扣3498。

根据题目描述和代码,计算字符串反转度的过程如下:

分步骤描述:

  1. 1. 初始化总和变量:首先初始化一个整数变量ans(在Go代码中作为命名返回值初始化为0),用于累加所有字符的贡献值。
  2. 2. 遍历字符串的每个字符:对于字符串s中的每个字符,按照它们在字符串中出现的顺序进行处理(从左到右)。每个字符的位置索引i从0开始(因为编程语言中字符串索引通常从0开始),但在计算时需要转换为从1开始的位置编号。
  3. 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. 4. 计算每个字符的贡献值
    • • 每个字符的贡献值 = 反向数值 × 该字符在字符串中的位置(从1开始计数)。
    • • 具体地,对于索引为i的字符(在代码中循环索引从0开始),其位置编号为i+1
    • • 例如:第一个字符(索引0)的位置是1,第二个字符(索引1)的位置是2,第三个字符(索引2)的位置是3。
  5. 5. 累加贡献值:将每个字符的贡献值加到总和变量ans中。
  6. 6. 返回总和:遍历完所有字符后,返回累加的总和ans作为字符串的反转度。

示例验证(以输入"s = abc"为例):

  • • 第一个字符'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等)外,没有使用额外的数据结构,空间使用是常数级别的。

Go完整代码如下:

.

代码语言:javascript
复制
package main

import (
    "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)
}

Python完整代码如下:

.

代码语言:javascript
复制
# -*-coding:utf-8-*-

def reverse_degree(s):
    ans = 0
    for i, c in enumerate(s):
        # 使用ord获取字符的Unicode码点,下标从1开始所以i+1
        ans += (ord('{') - ord(c)) * (i + 1)
    return ans

def main():
    s = "abc"
    result = reverse_degree(s)
    print(result)

if __name__ == "__main__":
    main()

我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让 Go 语言和算法助力您的职业发展

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分步骤描述:
  • 示例验证(以输入"s = abc"为例):
  • 复杂度分析:
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档