最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ LeetCode1781題解所有子字符串美麗值之和

 更新時(shí)間:2022年12月16日 10:54:15   作者:LetMeFly  
這篇文章主要為大家介紹了C++ LeetCode1781題解所有子字符串美麗值之和,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

LeetCode 1781.所有子字符串美麗值之和

力扣題目鏈接:leetcode.cn/problems/su…

一個(gè)字符串的 美麗值 定義為:出現(xiàn)頻率最高字符與出現(xiàn)頻率最低字符的出現(xiàn)次數(shù)之差。

  • 比方說,"abaacc" 的美麗值為 3 - 1 = 2 。

給你一個(gè)字符串 s ,請你返回它所有子字符串的 美麗值 之和。

示例 1:

輸入:s = "aabcb"
輸出:5
解釋:美麗值不為零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] ,每一個(gè)字符串的美麗值都為 1 。

示例 2:

輸入:s = "aabcbaa"
輸出:17

提示:

  • 1 <= s.length <= 500
  • s 只包含小寫英文字母。

方法一:前綴和

我們分別統(tǒng)計(jì)出26種字母的前綴和

這樣,我們只需要枚舉子串區(qū)間(兩重循環(huán)枚舉子串首尾),再統(tǒng)計(jì)出這個(gè)區(qū)間中,字母的最大和最小出現(xiàn)頻率,累加到答案中即可。

AC代碼

C++

class Solution {
public:
    int beautySum(string s) {
        int n = s.size();
        vector<vector<int>> prefix(26, vector<int>(n + 1));
        for (int i = 1; i <= n; i++) {
            for (int c = 0; c < 26; c++) {
                prefix[c][i] = prefix[c][i - 1];
            }
            prefix[s[i - 1] - 'a'][i]++;
        }
        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int M = 0, m = 1000;
                for (int c = 0; c < 26; c++) {
                    int thisC = prefix[c][j + 1] - prefix[c][i];
                    M = max(M, thisC);
                    if (thisC) {  // 不能出現(xiàn)0次
                        m = min(m, thisC);
                    }
                }
                // printf("i = %d, j = %d, M = %d, m = %d\n", i, j, M, m);  //***********
                ans += M - m;
            }
        }
        return ans;
    }
};

方法二:邊遍歷邊計(jì)算

方法一中,我們預(yù)處理使用前綴和計(jì)算出了每種元素的出現(xiàn)情況。但是每種字母的前綴和都需要O(len(s))O(len(s))O(len(s))的空間復(fù)雜度來保存

方法二中,我們不提前預(yù)處理計(jì)算出字母的出現(xiàn)情況,而是在枚舉字符串終點(diǎn)的同時(shí)計(jì)算。這樣,空間復(fù)雜度就減小了一個(gè)維度。

AC代碼

C++

class Solution {
public:
    int beautySum(string s) {
        int ans = 0;
        int n = s.size();
        for (int i = 0; i < n; i++) {
            int cnt[26] = {0};  // 只需要開辟O(C)的空間
            for (int j = i; j < n; j++) {
                cnt[s[j] - 'a']++;  // 枚舉子串終點(diǎn)的同時(shí)統(tǒng)計(jì)元素出現(xiàn)的次數(shù)
                int M = 0, m = 1000;
                for (int d = 0; d < 26; d++) {
                    M = max(M, cnt[d]);
                    if (cnt[d])
                        m = min(m, cnt[d]);
                }
                ans += M - m;
            }
        }
        return ans;
    }
};

以上就是C++ LeetCode1781題解所有子字符串美麗值之和的詳細(xì)內(nèi)容,更多關(guān)于C++ 子字符串美麗值和的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解

    C++調(diào)用Python基礎(chǔ)功能實(shí)例詳解

    c++調(diào)用Python首先安裝Python,本文以win7為例,給大家詳細(xì)介紹C++調(diào)用Python基礎(chǔ)功能,需要的朋友參考下吧
    2017-04-04
  • 淺談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR

    淺談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR

    下面小編就為大家?guī)硪黄獪\談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • C++ OpenCV實(shí)戰(zhàn)之標(biāo)記點(diǎn)檢測的實(shí)現(xiàn)

    C++ OpenCV實(shí)戰(zhàn)之標(biāo)記點(diǎn)檢測的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用C++ OpenCV實(shí)現(xiàn)關(guān)鍵點(diǎn)的檢測,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • 推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)

    推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)

    這篇文章主要介紹了C/C++編譯器的一些易混淆概念,這里腳本之家小編特為大家分享一下,需要的朋友可以參考下
    2021-06-06
  • 關(guān)于C++虛繼承的內(nèi)存模型問題

    關(guān)于C++虛繼承的內(nèi)存模型問題

    C++虛繼承的內(nèi)存模型是一個(gè)老生常談的話題,實(shí)現(xiàn)方法主要依賴于編譯器,本文從多個(gè)角度通過代碼詳解C++中虛繼承的內(nèi)存模型知識,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C/C++ Qt ToolBar菜單組件的具體使用

    C/C++ Qt ToolBar菜單組件的具體使用

    ToolBar工具欄在所有窗體應(yīng)用程序中都廣泛被使用,使用ToolBar可以很好的規(guī)范菜單功能分類,本文就詳細(xì)的介紹一下ToolBar組件的應(yīng)用,感興趣的可以了解一下
    2021-11-11
  • 對C語言中指針的理解與其基礎(chǔ)使用實(shí)例

    對C語言中指針的理解與其基礎(chǔ)使用實(shí)例

    這篇文章主要介紹了對C語言中指針的理解與其基礎(chǔ)使用實(shí)例,文中援引了知乎熱門問題"為什么說指針是 C 語言的精髓?"中的精彩回答,需要的朋友可以參考下
    2016-03-03
  • C++淺析程序中內(nèi)存的分布

    C++淺析程序中內(nèi)存的分布

    這篇文章主要介紹了C++內(nèi)存分布及用法,從內(nèi)存的基礎(chǔ)概念到內(nèi)存分配進(jìn)行了講解,內(nèi)存是我們開發(fā)中最重要的一部分,往往邏輯上的錯(cuò)誤就會造成內(nèi)存泄漏,導(dǎo)致程序無法運(yùn)行,下面我們就來了解文章對該內(nèi)容的詳細(xì)介紹
    2022-08-08
  • STl中的排序算法詳細(xì)解析

    STl中的排序算法詳細(xì)解析

    全排序即把所給定范圍所有的元素按照大小關(guān)系順序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已經(jīng)不是采用簡單的快速排序,而是結(jié)合內(nèi)插排序算法)
    2013-09-09
  • C++讀取文本文件中的漢字亂碼情況原因及解決

    C++讀取文本文件中的漢字亂碼情況原因及解決

    本文介紹簡體中文Windows操作系統(tǒng)中,C++讀取文本文件中的漢字亂碼情況原因及解決,文中通過代碼和圖文給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01

最新評論

泰和县| 新竹县| 浮梁县| 中西区| 商洛市| 铁力市| 周宁县| 云霄县| 徐闻县| 荔波县| 申扎县| 金堂县| 天等县| 常州市| 融水| 昭平县| 通海县| 陆川县| 新源县| 登封市| 原阳县| 迁西县| 红安县| 香河县| 勃利县| 云梦县| 普兰县| 江门市| 明溪县| 清丰县| 南江县| 泾源县| 板桥市| 天津市| 诏安县| 丰城市| 武汉市| 驻马店市| 沐川县| 林芝县| 时尚|