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 <= 100s只包含小写英文字母
提示:
- 通过取相邻字符ASCII值的绝对差值来计算所有相邻字符之间的差值总和。
解题思路
解题思路
这是一道简单的字符串遍历题目。题目要求计算相邻字符ASCII值差的绝对值之和。
基本思路
- 遍历字符串:从索引1开始遍历到字符串末尾,因为要比较相邻的字符
- 计算ASCII差值:对于每个位置i,计算
s[i]和s[i-1]的ASCII值差的绝对值 - 累加结果:将所有差值累加起来得到最终分数
实现要点
- 使用
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) | 只使用了常数额外空间 |