开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情
最近的疫情也是很严重啊,但并不妨碍我上班
所有子字符串美丽值之和
该题出自力扣的1781题 —— 所有子字符串美丽值之和【中等题】
审题
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。 比方说,"abaacc" 的美丽值为 3 - 1 = 2 。 给你一个字符串 s ,请你返回它所有子字符串的 美丽值 之和。
- 这是一道中等题,但是却没有什么意义,因为一眼就看到底了,题意很简单,就是给出一个字符串,通过返回字符串的美丽值之和
- 所谓的美丽值之和就是统计出出现的最高频率和最低频率,并且返回和
- 但是前提是要子字符串,也就是说要最少两种字符存在,并且其中一个有相同的字符
- 开辟一个字符数组,转换字符串s作为字符数组,遍历字符数组作为第一次循环
- 开辟一个26个长度的int数组,作为记录字符出现的频率和存在,从第一个层循环的下标开始做第二次循环
- 也就是说当前的子字符串就被记录起来了,统计最多出现过的字符
- 第三层循环遍历26长度的数组,如果出现过,那么取最小值
- 最终统计叠加的值,用双层循环来遍历所有子字符串,第一层循环子字符串的起点 i,第二层循环固定 i。
编码
class Solution {
public int beautySum(String s) {
int res = 0;
char[] chars = s.toCharArray();
int len = chars.length;
for (int i = 0; i < len; i++) {
int[] a = new int[26];
int max = 0;
for (int j = i; j < len; j++) {
a[chars[j] - 'a']++;
int min = len;
max = Math.max(a[chars[j] - 'a'],max);
for (int k = 0; k < 26; k++) {
if (a[k] > 0){
min = Math.min(min,a[k]);
}
}
res+= max - min;
}
}
return res;
}
}