注意题目要求是连续的子字符串,可以用滑动窗口来解,窗口大小从3开始到整个字符串的长度
class Solution {
public:
int res;
string t;
int letter[26];
void slide(string s, int k)
{
for (int i = 0; i <= s.size() - k; i ++ )
{
memset(letter, 0, sizeof letter); //初始化字母个数
for (int j = i; j < i + k; j ++ ) //统计当前窗口各字母个数
letter[s[j] - 'a'] ++ ;
int maxLen = 0, minLen = INT_MAX; //定义出现频率最低的次数(大于0)和出现频率最高的次数
for (int j = 0; j < 26; j ++ )
{
if (letter[j] > 0 && letter[j] < minLen) minLen = letter[j];
if (letter[j] > maxLen) maxLen = letter[j];
}
if (minLen != INT_MAX && maxLen != 0) res += maxLen - minLen; //合法的话,累加美丽值
}
}
int beautySum(string s) {
for (int k = 3; k <= s.size(); k ++ ) //窗口大小从3到整个字符串长度
slide(s, k);
return res;
}
};
好像可以用双重循环来做,我想复杂了😂