タイトルの説明:
入力と出力のスケールと合意:
アイデア:
長さが10 ^ 6を超えない場合、直接暴力O(26 * N)で十分です。
注目に値する1つの点は、要件を満たしている場合に、辞書式順序で出力する方法です。
私の方法は、最初に26文字のcnt [i]の出現回数を数えることです。
次に、cntを1から26までトラバースし、それが0であることを確認して、キューに入れます。
キューから取り出されると、辞書式であることが保証されます。キューが先入れ先出しだからです。
もちろん、逆の順番で出力することも可能です。
要約:
状態が転送されるとき、キューとcnt配列はクリアされません!!
その時何を考えていたのか分からなかった!!(親族が居間で大声で食べているかもしれません...)
i ++) { if(cnt [i]> 1)break; } if(cnt [i] == 0)q.push(i); //文字が0または1の 場合、次のようにできますif(i == 27)// 26全体を検索した後、文字はもうありません { // (int j = l; j <= r; j ++ ) { if(s [j]!= '?')cout << s [j]; else printf( "%c"、q.front()+ 'A'-1)、q.pop(); } cout << endl; return 0; } else { l ++、r ++; memset(cnt、0、sizeof(cnt)); while(!q.empty())q.pop(); } } cout <<-1 < <endl; return 0; }