1. 程式人生 > 其它 >Leetcode-5682. 所有子字串美麗值之和

Leetcode-5682. 所有子字串美麗值之和

題目

一個字串的 美麗值 定義為:出現頻率最高字元與出現頻率最低字元的出現次數之差。

比方說,“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; } };

程式碼執行結果:
程式碼執行結果
趁著沒人提交先霸個榜嘻嘻