leetcode 395. Longest Substring with At Least K Repeating Characters(高质量题)
只能说还是太菜,抄的网上大神的做法:
idea:
- mask 的每一位代表该位字母够不够k次,够k次为0,不够为1
- 对于每一位将其视为起点,遍历至末尾,找到其最大满足子串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(高质量题)的更多相关文章
- [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 ...
- 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 ...
- 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 ...
- 395. Longest Substring with At Least K Repeating Characters
395. Longest Substring with At Least K Repeating Characters 我的思路是先扫描一遍,然后判断是否都满足,否则,不满足的字符一定不出现,可以作为 ...
- 【LeetCode】395. Longest Substring with At Least K Repeating Characters 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/longest- ...
- 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 ...
- 【leetcode】395. Longest Substring with At Least K Repeating Characters
题目如下: 解题思路:题目要找出一段连续的子串内所有字符出现的次数必须要大于k,因此出现次数小于k的字符就一定不能出现,所以就可以以这些字符作为分隔符分割成多个子串,然后继续对子串递归,找出符合条件的 ...
- 395 Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子串
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度.示例 1:输入:s = "aaabb", k = 3输出:3最 ...
- [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 ...
随机推荐
- 深入理解L1、L2正则化
过节福利,我们来深入理解下L1与L2正则化. 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称.也就是 ...
- Python sqlalchemy的基本使用
示例代码 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base fr ...
- Linux(CentOS6)系统安装Windows字体
这里说个插曲,最近在linux(CentOS6)服务器上面发布了个Web项目,结果发现,有一处的汉字字体渲染不出来,显示的是“□□□□”.因为我的tomcat编码已经修改了URIEncoding为UT ...
- shiro源码篇 - shiro的session共享,你值得拥有
前言 开心一刻 老师对小明说:"乳就是小的意思,比如乳猪就是小猪,乳名就是小名,请你用乳字造个句" 小明:"我家很穷,只能住在40平米的乳房" 老师:" ...
- javascript Uncaught ReferenceError: 方法名 is not defined
前言: 那天我犯了这样一个低级错误,如果按照这样下去,根本在这条路上走不远.错的太离谱,把代码拿出来自己笑笑,等摆脱菜鸟之名的时候再回来好好的告诉自己,都是这么过来的,原来以前我菜的这么离谱.. 错误 ...
- 在JS中统计函数执行次数与执行时间
假如想统计JS中的函数执行次数最多的是哪个,执行时间最长的是哪个,该怎么做呢? 1. 统计函数执行次数 2. 统计函数执行时间 3. 如何控制函数的调用次数 4. 如何控制函数的执行时间 一.统计函数 ...
- spring boot(二): spring boot+jdbctemplate+sql server
前言 小项目或者做demo时可以使用jdbc+sql server解决即可,这篇就基于spring boot环境使用jdbc连接sql server数据库,和spring mvc系列保持一致. 在sp ...
- 在UAP中如何通过WebView控件进行C#与JS的交互
最近由于项目需求,需要利用C#在UWP中与JS进行交互,由于还没有什么实战经验,所有就现在网上百度了一下,但是百度的结果显示大部分都是在Android和IOS上面的方法,UWP中的几乎没有.还好微软又 ...
- LintCode Binary Search
For a given sorted array (ascending order) and a target number, find the first index of this number ...
- Python 字符串的操作
字符串的拼接 a = "hello" b = "klvchen" c = a + b print(c) 结果: helloklvchen 注意:该方法效率比较低 ...