b_lc_所有子字符串美丽值之和(26*前缀和而已)

字符串的 美丽值 定义为:出现频率最高字符与出现频率最低字符的出现次数之差。
比方说,"abaacc" 的美丽值为 3 - 1 = 2 。
给你一个字符串 s ,请你返回它所有子字符串的 美丽值 之和。

思路:无

const int N=505;
class Solution {
public:
    int f[N][26];
    int beautySum(string s) {
        int n = s.size(), ans = 0;
        for (int i=1; i<=n; i++) f[i][s[i-1]-'a']++;
        for (int i=1; i<=n; i++)
        for (int j=0; j<26; j++) 
            f[i][j] += f[i-1][j];
        for (int i=1; i<n; i++)
        for (int j=i+1; j<=n; j++) {
            int mx = 0, mi = n;
            for (int k=0; k<26; k++) {
                int c = f[j][k]-f[i-1][k];
                if (c == 0)  continue;
                if (c > mx) mx = c;
                if (c > 0 && c < mi) mi = c;
            }
            ans += mx - mi;
        }
        return ans;
    }
};
posted @ 2021-03-06 23:48  童年の波鞋  阅读(81)  评论(0编辑  收藏  举报