NC400. eli和字符串
描述
eli拿到了一个仅由小写字母组成的字符串。示例1
输入:
"abeba",2
输出:
3
说明:
选择 子串,长度为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; } };