美文网首页
LC395关于分治

LC395关于分治

作者: 锦绣拾年 | 来源:发表于2020-05-18 21:58 被阅读0次
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。

示例 1:

输入:
s = "aaabb", k = 3

输出:
3

最长子串为 "aaa" ,其中 'a' 重复了 3 次。
示例 2:

输入:
s = "ababbc", k = 2

输出:
5

最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
    int longestSubstring(string s, int k) {
        //第一步 k的值要过小的话
        if(k<=1)return s.size();
        
        //重要思路 凡是次数小于特定值的字符不应该被包括
        if(s.length()<k)
            return 0;
        //=0;        
        //字符,所以就直接用128位的数组,根本不需要用map
        map<char,int> ex;
        for(int i=0;i<s.length();i++){
           ex[s[i]]+=1;
            // cout<<ex[s[i]]<<endl;
        }
        int i=0;
        while(i<s.length()&&ex[s[i]]>=k){
            i++;
        }
        if(i==s.length()) return s.length();
        int l=longestSubstring(s.substr(0,i),k);
        
        while(i<s.length()&&ex[s[i]]<k){
            i++;
        }
        int r=0;
        if(i<s.length())
            r=longestSubstring(s.substr(i),k);
        
        return max(l,r);

        
        
        
    }
};

以及有一道Python题解,太精妙了

class Solution:
    def longestSubstring(self, s: str, k: int) -> int:
        if not s:
            return 0
        for c in set(s):
            if(s.count(c))<k:
                return max(self.ongestSubstring(t,k) for t in s.split(c))
        return len(s)

相关文章

  • LC395关于分治

    以及有一道Python题解,太精妙了

  • 关于“分治法”

    原文 https://book.douban.com/annotation/19387119/ 孙...

  • 关于分治法

    任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越...

  • 分治算法

    文章结构 如何理解分治算法 分治算法应用举例 1. 如何理解分治算法 1.1 分治算法的核心思想 分治算法的核心思...

  • 归并排序

    1、分治法 归并排序是完全遵循分治策略的排序算法。什么是分治法? 分治法,即将原问题分解为几个规模较小的子问题,递...

  • 基本算法

    分治 分治分治,即分而治之。分治,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问...

  • 分治

    一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或...

  • 分治

    一、棋盘覆盖问题 题意:在一个2k×2k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且...

  • 分治

    数列分治 POJ 1854: Evil Straw Warts Live题解链接 http://www.hankc...

  • 分治

    分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问...

网友评论

      本文标题:LC395关于分治

      本文链接:https://www.haomeiwen.com/subject/yhcmohtx.html