题目来自LeetCode编号1781
题目如下:
一个字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
- 比方说,
"abaacc"
的美丽值为3 - 1 = 2
。
给你一个字符串 s
,请你返回它所有子字符串的 美丽值 之和。
示例 1:
输入:s = "aabcb" 输出:5 解释:美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] ,每一个字符串的美丽值都为 1 。
示例 2:
输入:s = "aabcbaa" 输出:17
思路:
直接把子串遍历一遍统计
代码如下:
class Solution {
public int beautySum(String s) {
int ans = 0;//记录答案
int n = s.length();//字符串长度
for(int i=0;i<n;i++)
{
int cnt[]=new int[26];//下标就是我们的字母
for(int o=i;o<n;o++)//每次循环就是在统计一个子串
{
++cnt[s.charAt(o)-'a'];//统计次数
int mi=1000;//这个需要放大,不然如果字符串中有个字符出现很多次
//很容易出现赋值无法改变mi值的情况,例如最大出现次数是2000,最小出现次数是1001
//那么我们就无法改变mi的值了
int ma=0;
for(int v:cnt)
{
if(v>0)//避免将mi赋值为0的情况
{
mi=Math.min(v,mi);
ma=Math.max(v,ma);
}
}
ans+=(ma-mi);//加入最美值
}
}
return ans;
}
}