Hi, this side Imsfg.↵
I used both map/unordered_map since long time.↵
I observed some facts about about this special stl.↵
↵
1- According to me use mp[i]==0 instead of mp.find(i) because ↵
let suppose you increase the value of mp[i]++.after that you decrease the same value mp[i]--.↵
after u find mp.find(i). it show true but according to you this give 0 and does not exist in map.↵
if you not understand what i am saying please see both code u can observed what i say.↵
Case 1-use mp[i]==0↵
int longestKSubstr(string s, int k) {↵
↵
int i=0,j=0;↵
↵
int cnt=0;↵
↵
int ans=-1;↵
↵
map<char,int>mp;↵
↵
while(i<s.size()){↵
↵
while(cnt>k and j<=i){↵
↵
mp[s[j]]--;↵
↵
if(mp[s[j]]==0){↵
↵
cnt--;↵
↵
}↵
j++;↵
↵
}↵
if(mp[s[i]]==0){↵
↵
cnt++;↵
↵
}↵
if(cnt==k){↵
↵
ans=max(ans,i-j+1);↵
↵
}↵
mp[s[i]]++;↵
↵
i++;↵
↵
}↵
↵
↵
return ans;↵
}↵
↵
Case 2- use mp.find(i)↵
↵
//User function template for C++↵
↵
class Solution{↵
↵
public:↵
↵
int longestKSubstr(string s, int k) {↵
set<char>st;↵
↵
int i=0,j=0;↵
↵
int cnt=0;↵
↵
int ans=-1;↵
↵
map<char,int>mp;↵
↵
while(i<s.size()){↵
↵
while(cnt>k and j<=i){↵
↵
mp[s[j]]--;↵
↵
if(mp[s[j]]==0){↵
↵
cnt--;↵
↵
}↵
↵
j++;↵
↵
}↵
if(mp.find(s[i])==mp.end()){↵
↵
cnt++;↵
↵
}↵
↵
if(cnt==k){↵
↵
ans=max(ans,i-j+1);↵
↵
}↵
↵
mp[s[i]]++;↵
↵
i++;↵
↵
}↵
↵
return ans;↵
↵
}↵
↵
};↵
↵
hopefully You understand what I am saying.....↵
↵
↵
I used both map/unordered_map since long time.↵
I observed some facts about about this special stl.↵
↵
1- According to me use mp[i]==0 instead of mp.find(i) because ↵
let suppose you increase the value of mp[i]++.after that you decrease the same value mp[i]--.↵
after u find mp.find(i). it show true but according to you this give 0 and does not exist in map.↵
if you not understand what i am saying please see both code u can observed what i say.↵
Case 1-use mp[i]==0↵
int longestKSubstr(string s, int k) {↵
↵
int i=0,j=0;↵
↵
int cnt=0;↵
↵
int ans=-1;↵
↵
map<char,int>mp;↵
↵
while(i<s.size()){↵
↵
while(cnt>k and j<=i){↵
↵
mp[s[j]]--;↵
↵
if(mp[s[j]]==0){↵
↵
cnt--;↵
↵
}↵
j++;↵
↵
}↵
if(mp[s[i]]==0){↵
↵
cnt++;↵
↵
}↵
if(cnt==k){↵
↵
ans=max(ans,i-j+1);↵
↵
}↵
mp[s[i]]++;↵
↵
i++;↵
↵
}↵
↵
↵
return ans;↵
}↵
↵
Case 2- use mp.find(i)↵
↵
//User function template for C++↵
↵
class Solution{↵
↵
public:↵
↵
int longestKSubstr(string s, int k) {↵
↵
int i=0,j=0;↵
↵
int cnt=0;↵
↵
int ans=-1;↵
↵
map<char,int>mp;↵
↵
while(i<s.size()){↵
↵
while(cnt>k and j<=i){↵
↵
mp[s[j]]--;↵
↵
if(mp[s[j]]==0){↵
↵
cnt--;↵
↵
}↵
↵
j++;↵
↵
}↵
if(mp.find(s[i])==mp.end()){↵
↵
cnt++;↵
↵
}↵
↵
if(cnt==k){↵
↵
ans=max(ans,i-j+1);↵
↵
}↵
↵
mp[s[i]]++;↵
↵
i++;↵
↵
}↵
↵
return ans;↵
↵
}↵
↵
};↵
↵
hopefully You understand what I am saying.....↵
↵
↵