C8-11 · Nhóm từ cùng chữ cái

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

Hai từ gọi là cùng chữ cái nếu sắp xếp lại các chữ của từ này thì được từ kia, tức là hai từ có cùng các chữ cái với cùng số lần xuất hiện (ví dụ nam và man; nhưng aab và abb không cùng chữ cái).

Cho một dòng gồm các từ khác nhau. Hãy chia các từ thành nhóm, mỗi nhóm gồm các từ cùng chữ cái với nhau, rồi in mỗi nhóm có ít nhất 2 từ trên một dòng.

Dữ liệu vào

Một dòng chứa các từ, cách nhau một dấu cách; mỗi từ chỉ gồm chữ thường a–z; không có từ nào lặp lại.

Kết quả

  • Mỗi nhóm có ít nhất 2 từ in trên một dòng, các từ cách nhau một dấu cách.
  • Các nhóm in theo thứ tự xuất hiện của từ đầu tiên trong nhóm; trong mỗi nhóm, các từ theo thứ tự xuất hiện.
  • Không có nhóm nào thì in KHONG.

Ràng buộc

  • Dòng có ít nhất một từ; dài không quá ~2 \cdot 10^5~ ký tự; mỗi từ dài 1–20 chữ.

Ví dụ

Dữ liệu vào:

nam toi man tram oit mart abc

Kết quả:

nam man
toi oit
tram mart

Giải thích ví dụ

Từ Khóa nhóm "".join(sorted(tu))
nam, man amn
toi, oit iot
tram, mart amrt
abc abc

Nhóm amn có từ đầu tiên là nam (vị trí 1) nên in trước; nhóm iot bắt đầu ở toi (vị trí 2); nhóm amrt bắt đầu ở tram (vị trí 4). Nhóm abc chỉ có một từ nên không in.

Lưu ý

  • Gợi ý của sách: sorted("nam") là ['a', 'm', 'n']; khóa nhóm là chuỗi "".join(sorted(tu)). Không dùng thẳng list làm khóa (list không bất biến, báo TypeError).
  • Khóa phải giữ cả số lần mỗi chữ: sorted(set(tu)) hay tổng mã ord() đều gom nhầm.
  • Có thể có hàng chục nghìn từ: gom nhóm bằng dict (mục 8.2); so từng cặp từ sẽ quá chậm.

Nguồn: Bài C8-11, mục 8.9, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.

Nguồn trong sách: bài tập C8-11 (mục 8.9) · Mức: (****)


Đang tải...