Easy

题目描述

给定一个字符串 s,计算它的反向度数。

反向度数的计算方式如下:

  • 对于每个字符,将其在反向字母表中的位置(‘a’ = 26, ‘b’ = 25, …, ‘z’ = 1)乘以它在字符串中的位置(从 1 开始索引)。
  • 将字符串中所有字符的乘积相加。

返回 s 的反向度数。

示例 1:

输入:s = "abc"
输出:148
解释:

| 字母 | 反向字母表索引 | 字符串索引 | 乘积 |
|------|----------------|------------|------|
| 'a'  | 26             | 1          | 26   |
| 'b'  | 25             | 2          | 50   |
| 'c'  | 24             | 3          | 72   |

反向度数为 26 + 50 + 72 = 148。

示例 2:

输入:s = "zaza"
输出:160
解释:

| 字母 | 反向字母表索引 | 字符串索引 | 乘积 |
|------|----------------|------------|------|
| 'z'  | 1              | 1          | 1    |
| 'a'  | 26             | 2          | 52   |
| 'z'  | 1              | 3          | 3    |
| 'a'  | 26             | 4          | 104  |

反向度数为 1 + 52 + 3 + 104 = 160。

约束条件:

  • 1 <= s.length <= 1000
  • s 仅包含小写英文字母。

解题思路

解题思路

这道题是一个简单的字符串模拟题,核心是理解反向字母表的概念和计算规则。

算法步骤:

  1. 理解反向字母表映射:在反向字母表中,‘a’ 对应 26,‘b’ 对应 25,…,‘z’ 对应 1。对于任意字符 c,其反向字母表值为 27 - (c - 'a'),即 'z' - c + 1

  2. 遍历字符串:对字符串中的每个字符,计算其在反向字母表中的值乘以其在字符串中的位置(1-indexed)。

  3. 累加结果:将所有乘积相加得到最终的反向度数。

实现细节:

  • 字符串索引从 1 开始计算(题目要求)
  • 字符到反向字母表值的转换公式:27 - (s[i] - 'a')
  • 时间复杂度为 O(n),空间复杂度为 O(1)

这是一道直接按题意模拟即可的题目,没有复杂的算法技巧,重点是正确理解题意和实现细节。

代码实现

class Solution {
public:
    int reverseDegree(string s) {
        int result = 0;
        for (int i = 0; i < s.length(); i++) {
            int reverseAlphabetValue = 27 - (s[i] - 'a');
            int stringPosition = i + 1;
            result += reverseAlphabetValue * stringPosition;
        }
        return result;
    }
};
class Solution:
    def reverseDegree(self, s: str) -> int:
        result = 0
        for i, char in enumerate(s):
            reverse_alphabet_value = 27 - (ord(char) - ord('a'))
            string_position = i + 1
            result += reverse_alphabet_value * string_position
        return result
public class Solution {
    public int ReverseDegree(string s) {
        int result = 0;
        for (int i = 0; i < s.Length; i++) {
            int reverseAlphabetValue = 27 - (s[i] - 'a');
            int stringPosition = i + 1;
            result += reverseAlphabetValue * stringPosition;
        }
        return result;
    }
}
var reverseDegree = function(s) {
    let result = 0;
    for (let i = 0; i < s.length; i++) {
        const reverseAlphabetValue = 27 - (s.charCodeAt(i) - 'a'.charCodeAt(0));
        const stringPosition = i + 1;
        result += reverseAlphabetValue * stringPosition;
    }
    return result;
};

复杂度分析

复杂度类型分析
时间复杂度O(n),其中 n 是字符串的长度,需要遍历字符串一次
空间复杂度O(1),只使用了常数级别的额外空间