問題
C# の records は値で比較されます。つまり、別々のオブジェクトでも、すべてのフィールドが等しければ2つのレコードは等しいとみなされます。そのため、重複の削除は簡単です。
各レコードは name,city の形式で書かれます。両方のフィールドの前後の空白を削除してください。トリミング後は、両方のフィールドが完全に一致するときに2つのレコードは等しいものとします(大文字小文字は区別されます)。
unique_records(records) を実装してください。
入力
records: レコード群。順序付き。
出力
最初に現れた順序のまま、重複のないレコードを name,city の形式で、トリミング後のフィールドを使って返してください。
制約
0 ≤ レコードの数 ≤ 100,000
各フィールドはカンマを含まない 1〜30 文字
例
入力:
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"].
入力:
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用に調整されています。上記の説明と制約に従ってください。