美文网首页程序员
leetcode-第168场周赛题目-子串的最大出现次数

leetcode-第168场周赛题目-子串的最大出现次数

作者: 8239e604d437 | 来源:发表于2019-12-28 09:44 被阅读0次

    给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数:

    子串中不同字母的数目必须小于等于 maxLetters 。

    子串的长度必须大于等于 minSize 且小于等于 maxSize 。

    示例 1:

    ```

    输入:s = "aababcaab", maxLetters = 2, minSize = 3, maxSize = 4

    输出:2

    ```

    > 解释:子串 "aab" 在原字符串中出现了 2 次。 它满足所有的要求:2 个不同的字母,长度为 3 (在 minSize 和

    > maxSize 范围内)。

    示例 2:

    ```

    输入:s = "aaaa", maxLetters = 1, minSize = 3, maxSize = 3

    输出:2

    ```

    > 解释:子串 "aaa" 在原字符串中出现了 2 次,且它们有重叠部分。

    示例 3:

    ```

    输入:s = "aabcabcab", maxLetters = 2, minSize = 2, maxSize = 3

    输出:3

    ```

    示例 4:

    ```

    输入:s = "abcde", maxLetters = 2, minSize = 3, maxSize = 3

    输出:0

    ```

    提示:

    1 <= s.length <= 10^5

    1 <= maxLetters <= 26

    1 <= minSize <= maxSize <= min(26, s.length)

    s 只包含小写英文字母。

    ```js

    /**

    * @param {string} s

    * @param {number} maxLetters

    * @param {number} minSize

    * @param {number} maxSize

    * @return {number}

    */

    var maxFreq = function(s, maxLetters, minSize, maxSize) {

        let numCount = 0;

        let a = []

        for(let k=0;k<s.length;k++){

            for(let i=minSize;i<=maxSize;i++){

                if(numCount>0 && i>minSize){

                    continue;

                }

                if(!a[i-minSize]){

                    a[i-minSize] = {}

                }

                let c = s.substr(k,i)

                if(a[i-minSize][c]){

                    a[i-minSize][c] ++

                    if(a[i-minSize][c]>numCount){

                        numCount = a[i-minSize][c]

                    }

                }else if(c.length == i){

                    let difCount = countDifNum(c);

                    if(difCount <= maxLetters){

                        a[i-minSize][c] = 1;

                        if(a[i-minSize][c]>numCount){

                            numCount = a[i-minSize][c]

                        }

                    }

                }

            }

        }

        return numCount

    };

      //统计字符串中不同字母的数目

        function countDifNum(c){

            let a= {};

            let count = 0;

            for(let i=0;i<c.length;i++){

                if(!a[c[i]]){

                    a[c[i]]=1;

                    count++;

                }

            }

            return count;

        }

      ```

    相关文章

      网友评论

        本文标题:leetcode-第168场周赛题目-子串的最大出现次数

        本文链接:https://www.haomeiwen.com/subject/kwajoctx.html