您的位置:首页 > 编程语言 > Java开发

Leetcode-395. Longest Substring with At Least K Repeating Characters

2017-03-23 12:02 344 查看
前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。这次比赛略无语,没想到前3题都可以用暴力解。

博客链接:mcf171的博客

——————————————————————————————

Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no
less than k times.

Example 1:
Input:
s = "aaabb", k = 3

Output:
3

The longest substring is "aaa", as 'a' is repeated 3 times.


Example 2:
Input:
s = "ababbc", k = 2

Output:
5

The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.


这个题目有点意思,如果字符串s满足条件了,返回s的长度,否则取一个不满足k的字符,根据这个字符去分割。Your
runtime beats 78.69% of java submissions.
public class Solution {
public int longestSubstring(String s, int k) {
if (s.length() == 0 || k == 1) return s.length();
if (s.length() < k) return 0;

int[] count = new int[26];
for (char c : s.toCharArray()) count[c-'a'] ++;
boolean eligible = true;
for (int i = 0; i < 26; i ++) {
if (count[i] != 0 && count[i] < k) {eligible = false;break;}
}
if (eligible) return s.length();
char least = 0;
for (int i = 0; i < 26; i ++) {
if (count[i] != 0 && least == 0) {least = (char)(i+'a');continue;}
if (count[i]!=0 && count[i] < count[least - 'a']) least = (char)(i+'a');
}
String[] sub = s.split(least+"");
int res = 0;
for (String str : sub) {
res = Math.max(res, longestSubstring(str, k));
}
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 算法
相关文章推荐