• leetcode 395. Longest Substring with At Least K Repeating Characters


    395. Longest Substring with At Least K Repeating Characters

    https://www.cnblogs.com/grandyang/p/5852352.html

    题目的要求是找一段字符串,这段字符串中每个单词出现的次数都必须至少超过k次,求满足这种条件的字符串的最长的长度。

    暴力的方法是两个for循环,然后用hash记录字符出现的次数,然后每次去判断hash中是否满足这种条件,但每次去判断hash就比较复杂。

    下面这种方法,用一个int型32位的数字来标记当前遍历的字符是否满足条件,26以下每一位为0表示这个字符满足条件,为1表示不满足。每次更新,通过左移1来更新flag。如果flag为0了,说明当前位置所有的字符都满足条件,然后更新最大值,并且更新new_index。这个new_index+1就是下一次外循环的起点。

    class Solution {
    public:
        int longestSubstring(string s, int k) {
            int n = s.size(),i = 0,res = 0;
            while(i + k <= n){
                int m[26] = {0},flag = 0,new_index = i;
                for(int j = i;j < n;j++){
                    m[s[j] - 'a']++;
                    if(m[s[j] - 'a'] < k)
                        flag |= 1 << s[j] - 'a';
                    else
                        flag &= ~(1 << s[j] - 'a');
                    if(flag == 0){
                        res = max(res,j - i + 1);
                        new_index = j;
                    }
                }
                i = new_index + 1;
            }
            return res;
        }
    };
  • 相关阅读:
    MOOK学习
    寒假学习计划
    三位影响深刻的老师
    软工第三次作业-结对作业
    2018软工实践第二次作业
    2018软工实践第一次作业
    简单的自我介绍
    福大软工1816 · 第一次作业
    课程作业八
    课程作业七
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10908461.html
Copyright © 2020-2023  润新知