列表

详情


NC400. eli和字符串

描述

eli拿到了一个仅由小写字母组成的字符串。
她想截取一段连续子串,这个子串包含至少 个相同的某个字母
她想知道,子串的长度最小值是多少?
注:所谓连续子串,指字符串删除头部和尾部的部分字符(也可以不删除)剩下的字符串。例如:对于字符串而言,都是其子串。而则不是它的子串。
如果无论怎么取都无法满足条件,输出
否则输出一个正整数,为满足条件的子串长度最小值。

示例1

输入:

"abeba",2

输出:

3

说明:

选择 beb \子串,长度为3,其中包含相同的两个'b'

原站题解

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

C++ 解法, 执行用时: 12ms, 内存消耗: 2076KB, 提交时间: 2022-07-21

class Solution {
  public:
    int eliStr(string str, int k) {
        unordered_map<char, queue<int>> q;
        int z = INT_MAX;
        for (int i = 0; i < str.size(); ++i) {
            q[str[i]].push(i);
            if (q[str[i]].size() >= k) {
                z = min(z, i - q[str[i]].front() + 1);
                q[str[i]].pop();
            }
        }
        return z == INT_MAX ? -1 : z;
    }
};

C++ 解法, 执行用时: 12ms, 内存消耗: 2080KB, 提交时间: 2022-06-11

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param k int整型 
     * @return int整型
     */
    int eliStr(string str, int k) {
        // write code here
        unordered_map<char, queue<int>> pos;
        int ret = INT_MAX;
        for (int i = 0; i < str.size(); ++i){
            pos[str[i]].push(i);
            if (pos[str[i]].size() >= k){
                ret = min(ret, i - pos[str[i]].front() + 1);
                pos[str[i]].pop();
            }
        }
        return ret == INT_MAX ? -1 : ret;
    }
};



C++ 解法, 执行用时: 13ms, 内存消耗: 2080KB, 提交时间: 2022-05-23

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param k int整型 
     * @return int整型
     */
    int eliStr(string str, int k) {
        // write code here
        unordered_map<char, queue<int>> pos;
        int ret = INT_MAX;
        for (int i = 0; i < str.size(); ++i){
            pos[str[i]].push(i);
            if (pos[str[i]].size() >= k){
                ret = min(ret, i - pos[str[i]].front() + 1);
                pos[str[i]].pop();
            }
        }
        return ret == INT_MAX ? -1 : ret;
    }
};

C++ 解法, 执行用时: 14ms, 内存消耗: 1320KB, 提交时间: 2022-05-14

#include <unordered_map>

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param k int整型 
     * @return int整型
     */
    int eliStr(string str, int k) {
        int i,len=str.length(),l,r,res=len+1;
        if((k>0)&&(len>=k))
        {
            unordered_map<char,int> mp;
            unordered_map<char,int>::iterator itl,itr;
            mp.insert({str[0],1});
            for(l=0,r=0;l<len;)
            {
                itl=mp.find(str[l]);
                if((itr=mp.find(str[r]))==mp.end())
                    itr=mp.insert({str[r],0}).first;
                if(itr->second>=k)
                {
                    res=(res<=(r-l+1))?res:(r-l+1);
                    itl->second--;
                    l++;
                }
                else
                {
                    if(r<len-1)
                    {
                        r++;
                        if((itr=mp.find(str[r]))==mp.end())
                            itr=mp.insert({str[r],0}).first;
                        itr->second++;
                    }
                    else
                    {
                        itl->second--;
                        l++;
                    }
                }
            }
        }
        if(res>len)
            res=-1;
        return res;
    }
};

C++ 解法, 执行用时: 14ms, 内存消耗: 2068KB, 提交时间: 2022-08-06

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param k int整型 
     * @return int整型
     */
    int eliStr(string str, int k) {
       unordered_map<char, queue<int>>q;
        int z=INT_MAX;
        for(int i=0;i<str.size();++i)
        {
            q[str[i]].push(i);
            if(q[str[i]].size()>=k)
            {
                z=min(z,i-q[str[i]].front()+1);
                q[str[i]].pop();
            }
        }
        return z==INT_MAX?-1:z;
    }
};

上一题