列表

详情


NC179. 长度为 K 的重复字符子串

描述

给你一个由小写字母组成的长度为n的字符串 S ,找出所有长度为 k 且包含重复字符的子串,请你返回全部满足要求的子串的数目

数据范围: ,
进阶: 时间复杂度,空间复杂度

示例1

输入:

"createfunonyoka",4

输出:

4

示例2

输入:

"yokagames",3

输出:

1

示例3

输入:

"yoka",4

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2021-09-27

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return int整型
     */
    int numKLenSubstrRepeats(string s, int k) {
        // write code here
        int lens = s.length();
        int count = 0;
        
        for(int i=0; i<lens-k+1; ++i){
            for(int j=i+1; j<i+k; ++j){
                if(s[j]==s[i]){
                    count++;
                }
            }
        }
        return count;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2021-09-15

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return int整型
     */
    int numKLenSubstrRepeats(string s, int k) {
        // write code here
        int n = s.size();
        int ans = 0;
        for(int i = 0;i<n && i+k-1<n;i++){
            set<char>info;
            for(int j = i;j<i+k;j++){
                if(info.count(s[j])){
                    ans++;
                    break;
                }else{
                    info.insert(s[j]);
                }
            }
        }
        return ans;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2021-09-13

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return int整型
     */
    int numKLenSubstrRepeats(string s, int k) {
        int n = s.length(), result = 0;
        unordered_map<char, int> hashmap;
        for(int i = 0; i < n; i++){
            if(hashmap.find(s[i]) == hashmap.end())
                hashmap.emplace(s[i],i);
            else{
                if(i - hashmap[s[i]] < k)
                    result += 1;
                hashmap[s[i]] = i;
            }
        }
        return result;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2021-09-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return int整型
     */
    int numKLenSubstrRepeats(string s, int k) {
        // write code here
        int i = 0;
        int star = 0;
        int num = 0;
        int flag = 0;
        while(s[star+k-1])
        {
            flag = 0;
            for(i=1;i<=k;i++)
            {
                if(s[star] == s[star+i])
                    flag = 1;
            }
            if(flag)
                num++;
            star++;
        }
        return num;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2021-09-09

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return int整型
     */
    int numKLenSubstrRepeats(string s, int k) {
        // write code here
        int res = 0;
        vector<char> str;
        if(s.size() < k) return res;
        for(int i=0; i<=s.size()-k; i++){
            for(int j=i; j<i+k; j++){
                char t = s[j];
                if(find(str.begin(), str.end(),t) != str.end()){
                    res++;
                    break;
                }
                else{
                    str.push_back(t);
                }
            }
            str.clear();
        }
        return res;
    }
};

上一题