只能说还是太菜,抄的网上大神的做法:

idea:

  1. mask 的每一位代表该位字母够不够k次,够k次为0,不够为1
  2. 对于每一位将其视为起点,遍历至末尾,找到其最大满足子串T的下标max_idx,之后从max_idx+1开始遍历。

代码如下:

    public int longestSubstring(String s, int k) {
if (k == 1) return s.length();
int res = 0, i = 0, n = s.length();
while (i + k <= n){
int[] m = new int[26];
int mask = 0, max_idx = i;
for (int j = i; j < n; j ++){
int t = s.charAt(j) - 'a';
m[t]++;
if (m[t] < k) mask |= (1 << t);
else mask &= (~(1 << t));
if (mask == 0){
res = Math.max(res, j - i + 1);
max_idx = j;
}
}
i = max_idx + 1;
}
return res;
}

下面一种做法的思路是:把串的小于k的字符当做间隔,直到这个串的每一个字符都大于等于k为止。

(一开始有这个思路,没写出来- - )

    public int helper(String s, int k, int left, int right){
int len = right - left + 1;
if (len <= 0) return 0;
int i, j, maxlen = 0;
int[] m = new int[26];
for (i = left; i <= right; i++)
m[s.charAt(i) - 'a']++;
for(i = left, j = left; i <= right; i++){
if (m[s.charAt(i) - 'a'] < k){
maxlen = Math.max(maxlen, helper(s, k, j, i - 1));
j = i + 1;
}
}
if (j == left) return len;
else return Math.max(maxlen, helper(s, k, j, i - 1));
} public int longestSubstring(String s, int k) {
return helper(s, k, 0, s.length() - 1);
}

还有滑动窗口的做法,接下来更新。

leetcode 395. Longest Substring with At Least K Repeating Characters(高质量题)的更多相关文章

  1. [LeetCode] 395. Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  2. LeetCode 395. Longest Substring with At Least K Repeating Characters C#

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  3. leetcode 395. Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  4. 395. Longest Substring with At Least K Repeating Characters

    395. Longest Substring with At Least K Repeating Characters 我的思路是先扫描一遍,然后判断是否都满足,否则,不满足的字符一定不出现,可以作为 ...

  5. 【LeetCode】395. Longest Substring with At Least K Repeating Characters 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/longest- ...

  6. 2016/9/21 leetcode 解题笔记 395.Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  7. 【leetcode】395. Longest Substring with At Least K Repeating Characters

    题目如下: 解题思路:题目要找出一段连续的子串内所有字符出现的次数必须要大于k,因此出现次数小于k的字符就一定不能出现,所以就可以以这些字符作为分隔符分割成多个子串,然后继续对子串递归,找出符合条件的 ...

  8. 395 Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子串

    找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度.示例 1:输入:s = "aaabb", k = 3输出:3最 ...

  9. [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

随机推荐

  1. Golang 协程调度

    一.线程模型 N:1模型,N个用户空间线程在1个内核空间线程上运行.优势是上下文切换非常快但是无法利用多核系统的优点. 1:1模型,1个内核空间线程运行一个用户空间线程.这种充分利用了多核系统的优势但 ...

  2. Spring Boot初识(2)- Spring Boot整合Mybaties

    一.本文介绍 首先读这篇文章之前如果没有接触过Spring Boot可以看一下之前的文章,并且读这篇文章还需要你至少能写基本的sql语句.我在写这篇文章之前也想过到底是选择JPA还是Mybaties作 ...

  3. C#字符串分割成列表及相反转换

    在实际开发中,一些老系统,特别是ERP,在做数据交换的时候,保存的是文本格式,然后以一个特殊符号隔开.如 2018-01-02 12:33:20#24.4#20.0|2018-01-03 11:33: ...

  4. apache tomcat搭建负载均衡(实现集群中的session同步)

    原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低.承受并发小(1000左右).但目前有不少网站或者页面是JSP的.并采用了tomcat做为WEB,因此只能在此基础上调优. 目前采取 ...

  5. [TensorFlow] Introducing TensorFlow Feature Columns

    Welcome to Part 2 of a blog series that introduces TensorFlow Datasets and Estimators. We're devotin ...

  6. go sync.once用法

    欢迎关注go语言微信公众号 每日go语言 golang_everyday sync.once可以控制函数只能被调用一次.不能多次重复调用.示例代码: package main import ( &qu ...

  7. [转]ionic3 实现android版本打包

    本文转自:https://blog.csdn.net/weixin_39461487/article/details/79387250?utm_source=blogxgwz0 版权声明:本文为博主原 ...

  8. [转]npm、 cnpm、yarn

    本文转自:https://blog.csdn.net/sinat_34682450/article/details/79473658 终于搞懂了三者之间的关系- 要知道三者之间的关系首先要了解三个包管 ...

  9. MVC HtmlHelper用法

    HtmlHelper用来在视图中呈现 HTML 控件. 以下列表显示了当前可用的一些 HTML 帮助器. 本主题演示所列出的带有星号 (*) 的帮助器. ActionLink - Links to a ...

  10. SignalR的简单实现消息广播

    之前由于一个项目的需要(简单说一下,一个网页游戏,裁判的页面点击开始按钮,玩家便可以开始游戏),研究了很久,最终一个同事跟我推荐了SignalR.距离项目结束已经有一段时间了,再来回顾一下Signal ...