Easy

题目描述

给你一个字符串 s。字符串的分数定义为相邻字符ASCII值之间绝对差值的总和。

返回字符串 s 的分数。

示例 1:

输入: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。

示例 2:

输入:s = "zaz"
输出:50
解释:
字符串 s 中字符的ASCII值为:'z' = 122, 'a' = 97。
所以,s 的分数为 |122 - 97| + |97 - 122| = 25 + 25 = 50。

约束条件:

  • 2 <= s.length <= 100
  • s 只包含小写英文字母

提示:

  • 通过取相邻字符ASCII值的绝对差值来计算所有相邻字符之间的差值总和。

解题思路

解题思路

这是一道简单的字符串遍历题目。题目要求计算相邻字符ASCII值差的绝对值之和。

基本思路

  1. 遍历字符串:从索引1开始遍历到字符串末尾,因为要比较相邻的字符
  2. 计算ASCII差值:对于每个位置i,计算s[i]s[i-1]的ASCII值差的绝对值
  3. 累加结果:将所有差值累加起来得到最终分数

实现要点

  • 使用abs()函数或手动比较来计算绝对值
  • 字符可以直接进行算术运算,会自动转换为ASCII值
  • 时间复杂度为O(n),空间复杂度为O(1)

这道题目考查的是对字符ASCII值操作和基本循环遍历的理解,实现相对简单直接。

代码实现

class Solution {
public:
    int scoreOfString(string s) {
        int score = 0;
        for (int i = 1; i < s.length(); i++) {
            score += abs(s[i] - s[i-1]);
        }
        return score;
    }
};
class Solution:
    def scoreOfString(self, s: str) -> int:
        score = 0
        for i in range(1, len(s)):
            score += abs(ord(s[i]) - ord(s[i-1]))
        return score
public class Solution {
    public int ScoreOfString(string s) {
        int score = 0;
        for (int i = 1; i < s.Length; i++) {
            score += Math.Abs(s[i] - s[i-1]);
        }
        return score;
    }
}
var scoreOfString = function(s) {
    let score = 0;
    for (let i = 1; i < s.length; i++) {
        score += Math.abs(s.charCodeAt(i) - s.charCodeAt(i-1));
    }
    return score;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历字符串一次,n为字符串长度
空间复杂度O(1)只使用了常数额外空间