zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    更新ubuntu的源
    List<?>和List<Class<?>>区别及泛型相关
    MessageDigest类实现md5加密
    Oracle插入多个值的问题
    Oracle用户的初始化问题
    Linux 环境变量详解
    oracle数据库与实例
    Oracle基础--命令
    SQL 三种基本Join
    三种Join方法
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10908461.html
Copyright © 2011-2022 走看看