395. Longest Substring with At Least K Repeating Characters

news/2024/7/4 10:30:49

题目要求

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.

找出字符串中的最长子字符串,满足该子字符串中任何字符出现的次数都大于k。

思路和代码

这是一个经典的分治法解决的问题,关键在于我们如何将这个问题分解为更小的子问题。反过来想,这个子字符串一定不包含什么元素呢?当一个元素出现的总次数小于k,那么该元素一定不在子字符串中,只需要将其作为分界点,分别找出左半部分和右半部分的满足条件的最长子字符串。

    public int longestSubstring(String s, int k) {
        return longestSubstring(s, k, 0, s.length()-1);
    }
    
    public int longestSubstring(String s, int k, int left, int right) {
        if(left > right) {
            return 0;
        }

        int[] count = new int[26];
        for(int i = left ; i<=right ; i++) {
            count[s.charAt(i) - 'a']++;
        }
        int result = right - left + 1;
        for(int i = left ; i<=right ; i++) {
            if(count[s.charAt(i)-'a'] < k && count[s.charAt(i)-'a'] > 0) {
                int leftLongest = longestSubstring(s, k, left, i-1);
                int rightLongest = longestSubstring(s, k, i+1, right);
                result = Math.max(leftLongest, rightLongest);
                
                break;
            }
        }
        return result;
    }

http://www.niftyadmin.cn/n/706645.html

相关文章

Asp.Net实现JS前台带箭头的流程图方法总结!(个人笔记,信息不全)

Asp.Net实现JS前台带箭头的流程图方法总结&#xff01;&#xff08;持续更新中&#xff09; 一、返回前台json格式 json5 "[{\"Id\":2259,\"Name\":\"高中\"},{\"Id\":2259,\"tName\":\"初中\"},{"Id&…

Java 对象的继承,抽象类,接口

子父级继承 关键字 extends 首先创建一个父类 1 class Fu 2 { 3 String name; 4 int a1; 5 public void word() 6 { 7 System.out.println("工作"); 8 …

Selenium2+python自动化63-简易项目搭建

前言 到unittest这里基本上可以搭建一个简易的项目框架了&#xff0c;我们可以用一条run_main.py脚本去控制执行所有的用例&#xff0c;并生成报告&#xff0c;发送邮件一系列的动作 一、新建工程 1.打开pycharm左上角File>New Project&#xff0c;在Location位置输入项目名…

后端_服务器

本地搭建服务器 Nginx官网下载,解压放到本地文件夹.打开文件nginx.conf文件 ,做出以下修改:server {# 启动后的端口listen 8880; # 启动时的地址server_name localhost;# 启动后&#xff0c;地址栏输入: localhost:8880, 默认会在html文件夹下找 index.html文件locati…

2017年我国电力供需形势预测分析 清洁能源装机比重将提升

2016年&#xff0c;我国经济实现了“十三五”良好开局&#xff0c;GDP增速保持平稳&#xff0c;全社会用电量增速明显回升。2017年&#xff0c;我国面临着更为复杂的外部环境&#xff0c;经济下行压力仍然较大&#xff0c;电力供需形势将如何变化&#xff1f;有关专家进行了分析…

敏捷测试团队管理的挑战与机会

敏捷团队的管理其实的确面临着很多的挑战。蔡老师分别从敏捷管理的挑战、接受敏捷、敏捷下面的组织结构、敏捷架构下的沟通、敏捷下的KPI考核、以及机会和发展几个方面进行深入的讨论。 其实我觉得各个公司施行敏捷的时候都会遇见这次讲师所分享的一些问题&#xff0c;基本上都…

Taro-ui TabBar组件使用路由跳转

1、 安装taro-ui (此处使用cnpm) cnpm install taro-ui 2、 全局引入样式 app.scss sass &#xff1a;import "~taro-ui/dist/style/index.scss"; 3、 使用tabBar组件中引入AtTabBar &#xff0c;详情可查询官网&#xff1a;https://taro-ui.aotu.io/#/docs/tabbar i…

tf.cast()用法

把布尔类型转化成0和1类型&#xff0c;true是1&#xff0c;false是0反之&#xff0c;亦成立。 转载于:https://www.cnblogs.com/xinmomoyan/p/10395465.html