Hackerrank string problem

Revision en1, by mkmeden, 2022-06-22 20:35:35

https://www.hackerrank.com/challenges/bear-and-steady-gene/problem

Can someone please explain why my code is not passing some test cases.

#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;
}

Tags strings, window-sliding

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)