LeetCode3110

LeetCode.3110:字符串的分数

​ 和3340一样,简单的API练习题。

题目描述

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

请你返回 s分数

示例

示例1:

1
2
3
4
5
6
7
输入: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:

1
2
3
4
5
6
7
输入:s = "zaz"

输出:50

解释:

s 中字符的 ASCII 码分别为:'z' = 122 ,'a' = 97 。所以 s 的分数为 |122 - 97| + |97 - 122| = 25 + 25 = 50 。

提示:

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

题解

​ 同样首先注意到数据范围$2 <= s.length <= 100$,选择的方法自然是从头到尾的遍历。

代码

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int scoreOfString(String s) {
int n = s.length();
int res = 0;
int x = 0;
for(int i = 0; i < n-1; i++){
x = s.charAt(i) - s.charAt(i+1);
res = res + (x>0?x:-x);
}
return res;
}
}

复杂度分析

  • 时间复杂度:$O(n)$,其中 $n$ 是 $s$ 的长度。
  • 空间复杂度:$O(1)$。