文字 char の配列を指定すると、次のアルゴリズムを使用して圧縮します:
圧縮文字列 s は個別に返されるのではなく、入力文字配列 chars に格納される必要があります。グループ長が 10 以上の場合、chars.
内の複数の文字に分割されることに注意してください。入力配列の変更が完了したら、配列の新しい長さを返します。
一定の追加スペースのみを使用するアルゴリズムを作成する必要があります。
この問題を解決するには、現在の文字とその数を追跡しながら配列を反復処理する必要があります。新しい文字に遭遇すると、現在の文字とその数 (1 より大きい場合) を配列に追加します。スペースの複雑さの要件を満たすために、これを確実に実行する必要があります。
ブルート フォース ソリューションでは、入力配列の圧縮バージョンを格納するための新しい配列を作成します。これはスペース効率は良くありませんが、必要な手順を理解するのに役立ちます。
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; j時間計算量の分析:
ブルート フォース ソリューションはスペース効率が悪く、一定の追加スペースのみを使用するという制約を満たしていません。
最適化されたソリューションには、圧縮バージョンを保存するために入力配列を適切に変更することが含まれます。 2 つのポインターを使用します。1 つは入力配列の読み取り用、もう 1 つは圧縮出力の書き込み用です。
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; j時間計算量の分析:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
文字列操作:
インプレース アルゴリズム:
このような問題と戦略を実践することで、問題解決スキルを向上させ、さまざまなコーディングの課題に対する準備を整えることができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3