zoukankan      html  css  js  c++  java
  • Leetcode: 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) 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.

    Analysis:

    Given a string s, find out all chars that are invalid (i.e., count < k). The longest substring must reside in one of the substrings divided by those invalid chars. We find out all those possible substrings and recursively address each of them.

    NOTE: repeatedly using s.charAt() is actually very slow. So we convert the string to charArray in the first place

     1 public class Solution {
     2     public int longestSubstring(String s, int k) {
     3         return longestSubstring(s.toCharArray(), 0, s.length()-1, k);
     4     }
     5     
     6     public int longestSubstring(char[] arr, int start, int end, int k) {
     7         if (end < start) return 0;
     8         if (end-start+1 < k) return 0;
     9         int[] count = new int[26];
    10         for (int i=start; i<=end; i++) {
    11             count[arr[i]-'a']++;
    12         }
    13         for (int i=0; i<26; i++) {
    14             if (count[i] == 0) continue;
    15             if (count[i] < k) {
    16                 int j = start;
    17                 for (; j<=end; j++) {
    18                     if (arr[j] == (char)('a'+i)) break;
    19                 }
    20                 int left = longestSubstring(arr, start, j-1, k);
    21                 int right = longestSubstring(arr, j+1, end, k); 
    22                 return Math.max(left, right);
    23             }
    24         }
    25         return end-start+1;
    26     }
    27 }
  • 相关阅读:
    Activity生命周期回顾
    Android Camera拍照 压缩
    Android获取相册图片
    Android 常用系统控件
    Java synchronized详解
    Android输入法开发
    Android Toast和Notification
    Extjs 自定义控件
    在Extjs中动态增加控件
    数据库中存储js代码无法json解析
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6121232.html
Copyright © 2011-2022 走看看