https://www.hackerrank.com/challenges/bear-and-steady-gene/problem↵
↵
Can someone please explain why my code is not passing some test cases.↵
↵
↵
<spoiler summary="Code">↵
```↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
↵
string ltrim(const string &);↵
string rtrim(const string &);↵
↵
/*↵
* Complete the 'steadyGene' function below.↵
*↵
* The function is expected to return an INTEGER.↵
* The function accepts STRING gene as parameter.↵
*/↵
↵
int steadyGene(string gene) {↵
↵
int n =gene.length();↵
int req = n/4;↵
↵
map<char, int >hash ;↵
↵
hash['A']=0;↵
hash['C']=0;↵
hash['G']=0;↵
hash['T']=0;↵
for(auto x: gene)↵
hash[x]++;↵
↵
int ctr = 0 ;↵
↵
map<char ,int >miss;↵
↵
int l = 0 , r= 0;↵
↵
int ans = n ; ↵
↵
↵
for(auto x: hash)↵
{↵
ctr+=max(0 , req-x.second);↵
miss[x.first] = max(0 , req-x.second);↵
}↵
↵
if(ctr==0)↵
return 0 ;↵
↵
map<char, int >win;↵
↵
for(int i = l ; i<=r ;i++)↵
win[gene[i]]++;↵
↵
string check="ACGT";↵
int m =0 ;↵
↵
while(r<n)↵
{↵
int places=0;↵
↵
for(auto x: check)↵
{↵
if(miss[x]==0)↵
places+=win[x];↵
}↵
↵
↵
while(places>=ctr && l<=r)↵
{↵
↵
if(places>=ctr)↵
ans = min(ans , r-l+1);↵
↵
win[gene[l]]--;↵
l++;↵
places=0;↵
↵
for(auto x: check)↵
{↵
if(miss[x]==0)↵
places+=win[x];↵
}↵
↵
↵
}↵
↵
↵
r++;↵
win[gene[r]]++;↵
}↵
↵
return ans ;↵
}↵
↵
int main()↵
{↵
ofstream fout(getenv("OUTPUT_PATH"));↵
↵
string n_temp;↵
getline(cin, n_temp);↵
↵
int n = stoi(ltrim(rtrim(n_temp)));↵
↵
string gene;↵
getline(cin, gene);↵
↵
int result = steadyGene(gene);↵
↵
fout << result << "\n";↵
↵
fout.close();↵
↵
return 0;↵
}↵
↵
string ltrim(const string &str) {↵
string s(str);↵
↵
s.erase(↵
s.begin(),↵
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))↵
);↵
↵
return s;↵
}↵
↵
string rtrim(const string &str) {↵
string s(str);↵
↵
s.erase(↵
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),↵
s.end()↵
);↵
↵
return s;↵
}↵
```↵
</spoiler>↵
↵
↵
Can someone please explain why my code is not passing some test cases.↵
↵
↵
<spoiler summary="Code">↵
```↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
↵
string ltrim(const string &);↵
string rtrim(const string &);↵
↵
/*↵
* Complete the 'steadyGene' function below.↵
*↵
* The function is expected to return an INTEGER.↵
* The function accepts STRING gene as parameter.↵
*/↵
↵
int steadyGene(string gene) {↵
↵
int n =gene.length();↵
int req = n/4;↵
↵
map<char, int >hash ;↵
↵
hash['A']=0;↵
hash['C']=0;↵
hash['G']=0;↵
hash['T']=0;↵
for(auto x: gene)↵
hash[x]++;↵
↵
int ctr = 0 ;↵
↵
map<char ,int >miss;↵
↵
int l = 0 , r= 0;↵
↵
int ans = n ; ↵
↵
↵
for(auto x: hash)↵
{↵
ctr+=max(0 , req-x.second);↵
miss[x.first] = max(0 , req-x.second);↵
}↵
↵
if(ctr==0)↵
return 0 ;↵
↵
map<char, int >win;↵
↵
for(int i = l ; i<=r ;i++)↵
win[gene[i]]++;↵
↵
string check="ACGT";↵
int m =0 ;↵
↵
while(r<n)↵
{↵
int places=0;↵
↵
for(auto x: check)↵
{↵
if(miss[x]==0)↵
places+=win[x];↵
}↵
↵
↵
while(places>=ctr && l<=r)↵
{↵
↵
if(places>=ctr)↵
ans = min(ans , r-l+1);↵
↵
win[gene[l]]--;↵
l++;↵
places=0;↵
↵
for(auto x: check)↵
{↵
if(miss[x]==0)↵
places+=win[x];↵
}↵
↵
↵
}↵
↵
↵
r++;↵
win[gene[r]]++;↵
}↵
↵
return ans ;↵
}↵
↵
int main()↵
{↵
ofstream fout(getenv("OUTPUT_PATH"));↵
↵
string n_temp;↵
getline(cin, n_temp);↵
↵
int n = stoi(ltrim(rtrim(n_temp)));↵
↵
string gene;↵
getline(cin, gene);↵
↵
int result = steadyGene(gene);↵
↵
fout << result << "\n";↵
↵
fout.close();↵
↵
return 0;↵
}↵
↵
string ltrim(const string &str) {↵
string s(str);↵
↵
s.erase(↵
s.begin(),↵
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))↵
);↵
↵
return s;↵
}↵
↵
string rtrim(const string &str) {↵
string s(str);↵
↵
s.erase(↵
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),↵
s.end()↵
);↵
↵
return s;↵
}↵
```↵
</spoiler>↵
↵