-3

https://amazonindia.interviewstreet.com/challenges/dashboard/#problem/4fd648244715d 2 つのテスト ケースに対する私の答えは間違っています。k 個の要素を含むキューを取得しました。新しい要素が前の要素よりも小さい新しいキューを形成する場合、前の要素を削除します

vector<string> gud(vector<string> str,map<string,int> mymap,int tc,int cnt) {

    int siz1=tc;
    int count=0,count1=0,min=cnt,min_i=0;
    int start=0,point=0;
    bool first=true,neww=true;
    list<string> window;
    bool prev=false;
    for(int i=1; i<str.size(); i++) {
        string sr=str[i];
        transform(sr.begin(), sr.end(),     sr.begin(), ::tolower);

        if(first) {
            if( mymap.count(sr)>0) {
                mymap[sr]-=1;
                point=i;
                start=sr.length();
                window.push_back(sr);
                first=false;
                count++;
            }
        } else {

            if(prev && count==tc) {
                if(min>start) {
                    min=start;
                    min_i=point;
                }

            }

            if(mymap.count(sr)>0) {
                prev=true;
                if(mymap[sr]>0) {
                    start+=sr.length();
                    window.push_back(sr);
                    count++;
                    mymap[sr]-=1;

                }
                else if((!window.empty()) && (sr.compare(window.front())==0)) {
                    point++;
                    window.pop_front();
                    window.push_back(sr);
                    while((!window.empty()) && (mymap.count(window.front())<1)) {
                        point++;
                        start-=window.front().length();

                        window.pop_front();
                    }
                    while((!window.empty()) && (mymap[window.front()]<0) ) {
                        point++;
                        start-=window.front().length();
                        mymap[window.front()]+=1;

                        window.pop_front();
                        while((!window.empty()) && (mymap.count(window.front())<1)) {
                            point++;
                            start-=window.front().length();
                            window.pop_front();
                        }
                    }
                }//else if clse
                else {
                    start+=sr.length();
                    window.push_back(sr);
                    mymap[sr]-=1;
                    prev=false;
                }

            }
            else {
                prev=false;
                window.push_back(sr);
                start+=sr.length();
                //  cout<<"inserting "<<sr<<endl;
            }



        }
    }

    if(prev && count==tc) {
        if(min>start) {
            min=start;
            min_i=point;
        }

    }

    if(count!=tc) {
        cout<<"NO SUBSEGMENT FOUND";
        vector<string> f;
        f.push_back("");
        return f;
    }


    int uo=0;
    vector<string> give;
    give.push_back("");
    for(int i=min_i; i<str.size(); i++) {
        if(uo>=min)break;
        uo+=str[i].length();
        give.push_back(str[i]);
    }

    return give;
}
4

1 に答える 1

2

明らかな間違い:

for(int i=1;i<str.size();i++)

配列 (ベクトル) は 1 ではなく 0 からインデックス付けされます。そのため、最初の文字列がありません。

これはおそらくあなたが望むことをしていません:

if( mymap.count(sr)>0)

std::map として、キーはそこにあるかどうかのどちらかです。1 以上になることはありません。キーを使用してカウントしているため、おそらく次のようになります。

if( mymap[sr] > 0)

残りは私にとって無意味な意味不明です。

于 2012-07-02T12:50:37.490 に答える