2016-06-21 24 views
1

文字列の配列が入力として与えられます。 各文字列は、次の形式のものである:いくつかの条件に基づいた文字列の配列のマルチレベルソート

{ファーストネーム} {空白文字} {ローマ数字}

アレイがソート最初の名前に基づいてする必要があり、名前は同じで、その後にある場合ローマ数字の基礎。

入力 - [ "フィリップIV"、 "フィリップII"、 "ジョン・X"]

出力 - [ "ジョンX"、 "フィリップII"、 "フィリップIV"]

別バリエーション: 文字列の配列にはいくつかの重複が含まれています。配列は、降順で文字列の出現数に基づいてソートされなければならず、出現数が2つ以上の文字列で同じである場合、その逆順の辞書順に基づいてソートします。

入力 - [ "ABC"、 "ABC"、 "XYZ"、 "XYZ"、 "PQR"、 "PQR"、 "PQR"]

出力 - [ "PQR"、 "XYZ"、 "abc"]

この質問は、ここやそこでいくつかのバリエーションを使ってインタビューされています。両方とも、マルチレベルソートに関連しています。

私はブルートフォースアプローチでしか出くわしませんでした。

最初のものは、ローマ数字の順序マッピングを作成し、これを使用してファーストネームとローマ数字を処理するコンパレータを実装します。

文字列とその出現のマップを作成し、これを使用してコンパレータを実装します。

このような問題にアプローチするには、より良い方法がありますか?どんな助けも高く評価されます。

+1

これまでに何をしていますか? –

+0

あなたが試したことのあなたの記述を理解すれば、実際には適切な解決策のように見えます。時間の複雑さ(つまり、主にJavaコレクションに関して使用されるデータ型)やその他のパフォーマンス関連の側面(ローマ数字変換器やオカレンスマッピングのマルチスレッド初期化など)などの詳細については、 Javaフレームワークだけで簡単に解決できるもう一つのソリューションを見てください。 – Mena

+0

また、質問に+1しても、「あまりにも広すぎる」と答えて投票しました。 – Mena

答えて

0

名前を最初にソートしてローマンカウントすることで解決できます。

enter image description here

あなたがそうでなければ、それはあなたが二番目のソート台無し最初の列になり、安定したソート技法のいずれかを使用する場合にのみ、このアプローチは動作します。

関連する問題