首页 > 其他 > 详细

leetcode 395. Longest Substring with At Least K Repeating Characters

时间:2019-05-22 21:53:01      阅读:106      评论:0      收藏:0      [点我收藏+]

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;
    }
};

 

leetcode 395. Longest Substring with At Least K Repeating Characters

原文:https://www.cnblogs.com/ymjyqsx/p/10908461.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!