Leetcode-5682. 所有子字串美麗值之和
阿新 • • 發佈:2021-03-10
題目
一個字串的 美麗值 定義為:出現頻率最高字元與出現頻率最低字元的出現次數之差。
比方說,“abaacc” 的美麗值為 3 - 1 = 2 。
給你一個字串 s ,請你返回它所有子字串的 美麗值 之和。
示例 1:
輸入:s = “aabcb”
輸出:5
解釋:美麗值不為零的字串包括 [“aab”,“aabc”,“aabcb”,“abcb”,“bcb”] ,每一個字串的美麗值都為 1 。
示例 2:
輸入:s = “aabcbaa”
輸出:17
提示:
1 <= s.length <= 500
s 只包含小寫英文字母。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/sum-of-beauty-of-all-substrings
解題思路
昨晚的雙週賽這第三題最後一個測試點一直超時過不去,今天覺得突然蠢到自己了,一開始想到了在原有子字串的基礎上新增新字元計算美麗值變化,卻沒想到用滑動視窗,程式碼如下:
class Solution {
public:
int beautySum(string s) {
//嘗試呼叫子串
int sum=0;
for(int i=3;i<=s.size();i++){
vector<int> b(26,0);
for (int j=0;j<i;j++){
b[s[j]-97]++;
}
sum+=beauty(b);
for(int j=1;j<=s.size()-i;j++){//滑動視窗
b[s[j-1]-97]--;
b[s[j+i-1]-97]++;
sum+=beauty(b);
}
}
return sum;
}
//字串計算美麗值
int beauty(vector<int> b){
int small=500;
int big=0;
for(auto c:b){
if(c!=0){
small=min(small,c);
big=max(big,c);
}
}
return big-small;
}
};
程式碼執行結果:
趁著沒人提交先霸個榜嘻嘻