Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Bản ghi không trùng lặp

Xóa các bản ghi trùng nhau theo giá trị, giữ lại bản ghi đầu tiên của mỗi giá trị theo đúng thứ tự.

Bạn sẽ học được gì

  • So sánh record theo giá trị
  • Bỏ trùng mà vẫn giữ thứ tự
  • Chuẩn hóa trường bằng cách cắt khoảng trắng

Đề bài

Xem bản gốc (English)

C# records so sánh theo giá trị: hai records bằng nhau khi tất cả các trường của chúng bằng nhau, ngay cả khi chúng là hai đối tượng khác nhau. Điều đó làm việc xóa trùng trở nên dễ dàng.

Mỗi record được viết name,city. Hãy bỏ khoảng trắng ở đầu và cuối của cả hai trường; sau khi trim, hai records bằng nhau khi cả hai trường khớp chính xác (phân biệt chữ hoa chữ thường).

Implement unique_records(records).

Input

records: Các records, theo thứ tự.

Output

Trả về các records phân biệt theo đúng thứ tự chúng xuất hiện lần đầu, được viết name,city với các trường đã được trim.

Ràng buộc

0 ≤ số bản ghi ≤ 100,000

Mỗi trường dài 1 đến 30 ký tự và không có dấu phẩy

Ví dụ

Ví dụ 1
Đầu vào:
records = ["Ada,London", "Lin, Hanoi", "Ada , London"]

Kết quả mong đợi:
expected = ["Ada,London", "Lin,Hanoi"]
Đầu vào:
std::vector<std::string> records = {"Ada,London", "Lin, Hanoi", "Ada , London"};

Kết quả mong đợi:
std::vector<std::string> expected = {"Ada,London", "Lin,Hanoi"};
Đầu vào:
string[] records = new string[] {"Ada,London", "Lin, Hanoi", "Ada , London"};

Kết quả mong đợi:
string[] expected = new string[] {"Ada,London", "Lin,Hanoi"};

Giải thích

Sau khi trim, record thứ ba bằng record đầu tiên, nên nó bị loại bỏ: ["Ada,London", "Lin,Hanoi"].

Ví dụ 2
Đầu vào:
records = ["ada,Paris", "Ada,Paris"]

Kết quả mong đợi:
expected = ["ada,Paris", "Ada,Paris"]
Đầu vào:
std::vector<std::string> records = {"ada,Paris", "Ada,Paris"};

Kết quả mong đợi:
std::vector<std::string> expected = {"ada,Paris", "Ada,Paris"};
Đầu vào:
string[] records = new string[] {"ada,Paris", "Ada,Paris"};

Kết quả mong đợi:
string[] expected = new string[] {"ada,Paris", "Ada,Paris"};

Giải thích

Phân biệt chữ hoa chữ thường, nên hai records này khác nhau: ["ada,Paris", "Ada,Paris"].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Cắt khoảng trắng cả hai trường trước khi so sánh.

Gợi ý 2

Một set các cặp (name, city) ghi nhớ những record đã gặp.

Gợi ý 3

Xuất mỗi record mới ở lần đầu nó xuất hiện, theo thứ tự đầu vào.

Độ phức tạp mong đợi

thời gian O(tổng độ dài), bộ nhớ phụ O(số bản ghi)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.