题目
题解
注意要求的不是字符串的美丽值(否则就是简单题了…),而是所有子字符串的美丽值之和
题解就是双重循环,暴力地去找每个子字符串的最高频次和最低频次,之差计入美丽值
class Solution {
public int beautySum(String s) {
int res=0,n=s.length();
for(int i=0;i<n;i++){//子字符串开头位置
int[] count=new int[26];
int max=0;
for(int j=i;j<n;j++){//遍历子字符串的每一位
count[s.charAt(j)-'a']++;
//求最大频率
max=Math.max(max,count[s.charAt(j)-'a']);
//每一个j都代表从i到j的一个子字符串
//因此对每个j都遍历哈希表求最小频率
int min=n;
for(int k=0;k<26;k++){
if(count[k]>0)
min=Math.min(min,count[k]);
}
res+=max-min;//子字符串的美丽值
}
}
return res;
}
}
时间复杂度: O ( 26 n 2 ) O(26n^2) O(26n2)
空间复杂度: O ( 26 ) O(26) O(26)