1. 程式人生 > >LeetCode-395. 至少有K個重複字元的最長子串

LeetCode-395. 至少有K個重複字元的最長子串

找到給定字串(由小寫字元組成)中的最長子串 T , 要求 T 中的每一字元出現次數都不少於 k 。輸出 T 的長度。示例 1:輸入: s = “aaabb”, k = 3

輸出: 3

最長子串為 “aaa” ,其中 ‘a’ 重複了 3 次。 示例 2:輸入: s = “ababbc”, k = 2

輸出: 5

最長子串為 “ababb” ,其中 ‘a’ 重複了 2 次, ‘b’ 重複了 3 次。

思想

我們需要一個mip資料記錄每個字串中,各個小寫字母出現的次數,我們在將這個字串傳給我們自定義的函式來判斷這個字串是否滿足條件,然後再求出滿足條件中最長的字串就可以啦。

程式設計實現:

class Solution {
    public int longestSubstring(String s, int k) {
        if(k<=1)
            return s.length();
        char[] arr = s.toCharArray();
        int size = 0;
        for(int i=0;i<arr.length;i++){
            int[]mip =new int[26];
            mip[arr[i]-'a']++;
            for(int j=i+1;j<arr.length;j++){
                mip[arr[j]-'a']++;
                if(arrBiggerK(mip,k)==true && j-i+1>size){
                    size = j-i+1;
                }
            }
        }
        return size;
    }
    private boolean arrBiggerK(int[] arr,int k){
        for(int c : arr){
            if(c > 0 && c < k){
                return false;
            }
        }
        return true;
    }
};