30/09/2018, 23:43
Liệt kê từ trong câu và sắp xếp theo số lần xuất hiện giảm dần với số lần xuất hiện
Đạt có đề này, mọi người vào giải cho vui.
Nhập vào một chuỗi, xuất ra danh sách các từ trong câu và số lần xuất hiện theo thứ tự giảm dần. Không tính khoảng trống, dấu câu, ký tự khác
Ví dụ
intput
“day nhau hoc. hoc nhau day. HOC hoc ?? day day. day MA khong hoc.”
ouput
hoc : 5
day : 5
nhau : 2
khong : 1
ma : 1
Yêu cầu thêm:
- Phân tích time complexity và space complexity
Được dùng mọi ngôn ngữ
Bài liên quan
chử
HOC
vshoc
có khác nhau không a :D, phải khác nhau chứDùng
Python
libraries, mẫu thử 1000 lầnOutput:
Time complexity
: ~10 usSpace complexity
: đang tìm hiểuDùng
radix sort
Time, space : O(n*|w|)
Tận dụng mọi thứ có thể của java
Mọi người giải thích thuật toán của mình ra luôn được không? Vì bài này mình cho phép dùng mọi ngôn ngữ, nên tốt nhất là nói luôn giải thuật để người khác đọc vào hiểu được.
P/S: Đạt không nghĩ là bài này lại có nhiều giải pháp overkill như vậy.
P/S2: Đạt giải bài này dùng cách tương tự như @nguyenhuuca, dùng
unordered_map
Bước 1: Tách từng từ trong chuỗi ra
Bước 2: Dùng mỗi từ là key trong unordered_map, value là count của từ đó. Với cách này mình sẽ có O(n)
Bước 3: Chuyển cái kết quả từ map sang vector, sort lại. Với bước này mình sẽ tốn O(mlogm) với m là số lượng từ đã sắp xếp trong câu. m <= n.
Tổng phức tạp của bài này là O(n + mlogm), giả sử m << n thì coi như O(n)
Space complexity: O(m), với m là số lượng từ trong trong kết quả
Cái em dùng giống anh Đạt rồi, khỏi giải thích nhỉ :))
tính cmt mà ai cũng đưa sol hết rồi :’(
Kiếm bài khác đưa lên giải chơi Phúc.