题目描述
给你一个字符串 s
和一个整数 k
,请你找出 s
中的最长子串, 要求该子串中的每一字符出现次数都不少于 k
。返回这一子串的长度。
示例 1:
1 2 3
| 输入:s = "aaabb", k = 3 输出:3 解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次。
|
解题思路
- 分治:递归返回条件:s.length()<k或找到符合条件的s
执行用时:4 ms, 在所有 Java 提交中击败了60.30%的用户
内存消耗:41.3 MB, 在所有 Java 提交中击败了34.40%的用户
通过测试用例:37 / 37
时间 O(N2626)
空间 O(26*26)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public int longestSubstring(String s, int k) { int n=s.length(); if(n<k)return 0; Map<Character,Integer> map=new HashMap(); for(int i=0;i<n;i++){ char c=s.charAt(i); map.put(c,map.getOrDefault(c,0)+1); } for(char c:map.keySet()){ if(map.get(c)<k){ int res=0; for(String str:s.split(String.valueOf(c))){ res=Math.max(res,longestSubstring(str,k)); } return res; } } return n; } }
|