[LeetCode]子串的最大出現次數(字符串)


題目

給你一個字符串 s ,請你返回滿足以下條件且出現次數最大的 任意 子串的出現次數:

子串中不同字母的數目必須小於等於 maxLetters 。
子串的長度必須大於等於 minSize 且小於等於 maxSize 。

示例 1:

輸入:s = "aababcaab", maxLetters = 2, minSize = 3, maxSize = 4
輸出:2
解釋:子串 "aab" 在原字符串中出現了 2 次。
它滿足所有的要求:2 個不同的字母,長度為 3 (在 minSize 和 maxSize 范圍內)。

題解

  • 如果subStr是滿足包含字母種類<=maxLetters的子串,則subStr的子串也一定是,所以maxSize是沒用的。
  • 故題意:找到len=minSize的,且包含字母種類<=maxLetters的子串,出現次數最多的即可。
  • 故思路:1 遍歷原串的所有長度為minSize的字串;2 判斷是否滿足字母種類<=maxLetters;3 並維護一個HashMap表示滿足的子串的出現次數,最終找出現次數最多的即可。
    其中,字母種類放入set中看set.size()即可得到。

代碼

class Solution {
    public int maxFreq(String s, int maxLetters, int minSize, int maxSize) {
        Map<String,Integer> map = new HashMap<>();
        for(int i=0;i+minSize<=s.length();++i){
            String subStr= s.substring(i,i+minSize);
            if(isVaild(subStr,maxLetters)){
                map.put(subStr,map.getOrDefault(subStr,0)+1);
            }
        }

        int max = 0;
        for(String str: map.keySet()){
            int cnt = map.get(str);
            if(cnt>max)max=cnt; 
        }
        return max;
    }

    private boolean isVaild(String s,int maxLetters){
        Set<Character> set = new HashSet<>();
        for(char c: s.toCharArray()){
            set.add(c);
        }

        return set.size()<=maxLetters;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM