• LeetCode395-至少有 K 个重复字符的最长子串


    题目链接:https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters

    public class LeetCode395 {
    
        public static void main(String[] args) {
            function_1("weitong",1);
            System.out.println("res="+res);
        }
        static int res=0;
        public static int longestSubstring(String s, int k) {
            res=0;
            function_1(s,k);
            return res;
        }
        public static void function_1(String s,int k){
            System.out.println("string="+s);
            //作为统计字母个数的数组
            int [] chars=new int[26];
            for (int i=0;i<chars.length;i++){
                chars[i]=0;
            }
            //首先字符串的长度要大于等于k
            if(s.length()<k){
                return;
            }
            //遍历统计字符串中字母a-z的个数
            for(int i=0;i<s.length();i++){
                chars[s.charAt(i)-'a']++;
            }
    
            System.out.println("统计结果:");
            //找到统计结果中,总数大于0,但小于k的字母
            Set<Integer> charsSet=new HashSet<>();//记录有那些字母个数是小于k的
            for(int i=0;i<chars.length;i++){
                if(chars[i]>0){
                    System.out.println((char)('a'+i)+":"+chars[i]);
                }
                if(chars[i]>0 && chars[i]<k){
                    System.out.println("个数小于k的字母:");
                    System.out.println((char)('a'+i)+":"+chars[i]);
                    charsSet.add(('a'+i));
                }
            }
            if(charsSet.size()==0){
                res=(s.length()>res? s.length():res);
                return;
            }
            //记录不需要的字母在字符串中的坐标
            List<Integer> indexList=new ArrayList<>();
            for(int i=0;i<s.length();i++){
                if(charsSet.contains(Integer.valueOf(s.charAt(i)))){
                    indexList.add(i);
                }
            }
            System.out.println("坐标位置:");
            for (Integer integer : indexList) {
                System.out.println(integer);
            }
            for(int i=0;i<indexList.size();i++){
                if(i==indexList.size()-1 && indexList.get(i)<s.length()-1){
                    function_1(s.substring(indexList.get(i)+1),k);
                }
                if(i==0){
                    if(indexList.get(i)-0>=k){
                        function_1(s.substring(0,indexList.get(i)),k);
                    }
                }else{
                    if((indexList.get(i)-indexList.get(i-1)-1)>=k){
                        function_1(s.substring(indexList.get(i-1)+1,indexList.get(i)),k);
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    遗传学详解及Matlab算法实现
    (转)非常好的理解遗传算法的例子
    Halcon学习笔记之支持向量机(二)
    Hough 变换
    主元分析PCA理论分析及应用
    Retinex图像增强算法
    Halcon学习笔记之支持向量机(一)
    阿里云OSS安装使用问题
    JS中双击和单击事件冲突解决
    JavaScript正则表达式应用---replace()
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14920243.html
Copyright © 2020-2023  润新知