题意:
	        给你一个由小写字母组成的长度为n的字符串 S ,找出所有长度为 k 且包含重复字符的子串,请你返回全部满足要求的子串的数目。
	方法一:
	暴力模拟
思路:暴力枚举。
外层循环枚举起点,内层循环枚举长度为k的区间,并判断该区间是否包含重复字符。
class Solution {
public:
    int cnt[26]={0};//计数数组
    int numKLenSubstrRepeats(string s, int k) {
        int res=0;
        int len=s.size();
        for(int i=0;i<len-k+1;i++){//枚举起点
            memset(cnt,0,sizeof(cnt));
            for(int j=i;j<i+k;j++){//遍历长度为k的区间
                cnt[s[j]-'a']++;
                if(cnt[s[j]-'a']>1){//判断是否包含重复字符
                    res++;
                    break;
                }
            }
        }
        return res;
    }
};
时间复杂度:%2Cn%E6%98%AF%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6%EF%BC%8Ck%E6%98%AF%E5%8C%BA%E9%97%B4%E9%95%BF%E5%BA%A6%E3%80%82) 空间复杂度:
空间复杂度:%2C%E5%B8%B8%E6%95%B0%E7%BA%A7%E5%88%AB%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%EF%BC%8C%E8%AE%A1%E6%95%B0%E6%95%B0%E7%BB%84cnt%5B%20%5C%20%5D%E7%9A%84%E5%A4%A7%E5%B0%8F%E6%9C%80%E5%A4%A7%E4%B8%BA26%E3%80%82)
	方法二:
	滑动窗口
思路:利用左右指针(滑动窗口)实现。先初始化一个长度为 k 的区间,然后循环,左右指针每次加一,并判断区间内是否有包含重复字符的子串。
class Solution {
public:
    int cnt[26]={0};//计数数组
    int numKLenSubstrRepeats(string s, int k) {
        int res=0;
        int len=s.size();
        int l=0,r=0;//左右指针
        while(r<len){//循环条件
            if(r<k){//初始化长度为k的区间
                cnt[s[r++]-'a']++;
            }else{
                for(int i=0;i<26;i++){//判断是否有包含重复字符的子串
                    if(cnt[i]>1){
                        res++;
                        break;
                    }
                }
                cnt[s[r++]-'a']++;//右指针++
                cnt[s[l++]-'a']--;//左指针++
            }
        }
        for(int i=0;i<26;i++){
            if(cnt[i]>1){
                res++;
                break;
            }
        }
        return res;
    }
};
时间复杂度:%2Cn%E6%98%AF%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6%2C%E9%81%8D%E5%8E%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%82) 空间复杂度:
空间复杂度:%2C%E5%B8%B8%E6%95%B0%E7%BA%A7%E5%88%AB%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%EF%BC%8C%E8%AE%A1%E6%95%B0%E6%95%B0%E7%BB%84cnt%5B%20%5C%20%5D%E7%9A%84%E5%A4%A7%E5%B0%8F%E6%9C%80%E5%A4%A7%E4%B8%BA26%E3%80%82)



 京公网安备 11010502036488号
京公网安备 11010502036488号