Hackerrank string problem
Difference between en2 and en3, changed 10 character(s)
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>↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English mkmeden 2022-06-22 20:37:12 10
en2 English mkmeden 2022-06-22 20:36:33 47
en1 English mkmeden 2022-06-22 20:35:35 2258 Initial revision (published)