すべてのチャレンジ
簡単 0件解決済み 正答率0%

重複のないレコード

値が等しい重複レコードを削除し、それぞれ最初に現れたものだけを順序通りに残します。

このチャレンジで学べること

  • レコードを値で比べる
  • 順番を保ったまま重複を取り除く
  • 空白を取り除いてフィールドをそろえる

問題

原文(英語)を表示

C# の records は値で比較されます。つまり、別々のオブジェクトでも、すべてのフィールドが等しければ2つのレコードは等しいとみなされます。そのため、重複の削除は簡単です。

各レコードは name,city の形式で書かれます。両方のフィールドの前後の空白を削除してください。トリミング後は、両方のフィールドが完全に一致するときに2つのレコードは等しいものとします(大文字小文字は区別されます)。

unique_records(records) を実装してください。

入力

records: レコード群。順序付き。

出力

最初に現れた順序のまま、重複のないレコードを name,city の形式で、トリミング後のフィールドを使って返してください。

制約

0 ≤ レコードの数 ≤ 100,000

各フィールドはカンマを含まない 1〜30 文字

例

例 1
入力:
records = ["Ada,London", "Lin, Hanoi", "Ada , London"]

期待される出力:
expected = ["Ada,London", "Lin,Hanoi"]
入力:
std::vector<std::string> records = {"Ada,London", "Lin, Hanoi", "Ada , London"};

期待される出力:
std::vector<std::string> expected = {"Ada,London", "Lin,Hanoi"};
入力:
string[] records = new string[] {"Ada,London", "Lin, Hanoi", "Ada , London"};

期待される出力:
string[] expected = new string[] {"Ada,London", "Lin,Hanoi"};

解説

トリミング後、3つ目のレコードは1つ目と等しいので削除されます: ["Ada,London", "Lin,Hanoi"].

例 2
入力:
records = ["ada,Paris", "Ada,Paris"]

期待される出力:
expected = ["ada,Paris", "Ada,Paris"]
入力:
std::vector<std::string> records = {"ada,Paris", "Ada,Paris"};

期待される出力:
std::vector<std::string> expected = {"ada,Paris", "Ada,Paris"};
入力:
string[] records = new string[] {"ada,Paris", "Ada,Paris"};

期待される出力:
string[] expected = new string[] {"ada,Paris", "Ada,Paris"};

解説

大文字小文字は区別されるので、この2つのレコードは異なります: ["ada,Paris", "Ada,Paris"].

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

比べる前に両方のフィールドの空白を取り除きます。

ヒント 2

(name, city) の組の set で、見たレコードを覚えます。

ヒント 3

新しいレコードは最初に現れたときに、入力順で出力します。

目安の計算量

時間 O(合計の長さ)、追加メモリ O(レコードの数)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。