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:
Example 2:
这个题目有点意思,如果字符串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;
}
}
博客链接: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;
}
}
相关文章推荐
- Leetcode 395. Longest Substring with At Least K Repeating Characters 至少K重复最长子序列 解题报告
- leetcode_[python/C++]_395_Longest Substring with At Least K Repeating Characters
- leetcode 395. Longest Substring with At Least K Repeating Characters 最长K个数量的字符 + DFS深度优先搜索
- LeetCode[395] Longest Substring with At Least K Repeating Characters
- [Leetcode] 395. Longest Substring with At Least K Repeating Characters 解题报告
- Leetcode: Longest Substring with At Least K Repeating Characters
- [LeetCode] 395. Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
- [LeetCode] 395. Longest Substring with At Least K Repeating Characters
- LeetCode No.395 Longest Substring with At Least K Repeating Characters
- LeetCode - 395 - Longest Substring with At Least K Repeating Characters
- leetcode_[python/C++]_395_Longest Substring with At Least K Repeating Characters_(递归非递归)
- *Leetcode 395. Longest Substring with At Least K Repeating Characters
- 【Leetcode】395. Longest Substring with At Least K Repeating Characters
- LeetCode-Longest Substring with At Least K Repeating Characters
- LeetCode 395. Longest Substring with At Least K Repeating Characters
- 【Leetcode】395. Longest Substring with At Least K Repeating Characters
- LeetCode赛题395----Longest Substring with At Least K Repeating Characters
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
- LeetCode 395 Longest Substring with At Least K Repeating Characters
- leetcode 395. Longest Substring with At Least K Repeating Characters