Giả sử ta có mảng log. Mỗi mục là chuỗi phân cách bằng khoảng trắng. Từ đầu tiên là định danh alphanumeric. Sau đó có hai loại chuỗi:
- Mỗi từ sau id chỉ chứa chữ thường;
- Mỗi từ sau id chỉ chứa chữ số.
Gọi hai loại log là letter-logs và digit-logs. Đảm bảo mỗi log có ít nhất một từ sau id.
Ta sắp xếp lại log sao cho tất cả letter-logs ở trước digit-log. Letter-logs sắp xếp theo thứ tự từ điển bỏ qua định danh, dùng định danh để giải quyết tie. Cuối cùng, digit-logs giữ thứ tự gốc. Trả về thứ tự cuối cùng.
Ví dụ, logs = ["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"], đầu ra ["let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 5 2","dig2 4 8"]
Giải quyết:
- words := list mới
- nums := list mới
- for log in logs, do
- s := list từ của log
- if từ thứ hai là chữ số, thêm log vào nums
- ngược lại, nối các phần tử s bằng khoảng trắng thêm vào words
- words := sắp xếp words theo thứ tự từ điển
- words := nối các phần tử words bằng khoảng trắng thành list chuỗi
- gộp words và nums, trả về
Xem triển khai:
Ví dụ
class Solution:
def reorderLogFiles(self, logs):
words = []
nums = []
for log in logs:
s = log.split()
if s[1].isdigit():
nums.append(log)
else:
words.append((s[0], ' '.join(s[1:])))
words = sorted(words, key=lambda x: (x[1], x[0]))
words = [' '.join(w) for w in words]
return words + nums
ob = Solution()
print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"])) Đầu vào
["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]
Đầu ra
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']