30 ngày chống COVID cùng Leetcode | Ngày 06
Cho một mảng String, là một tập hợp của các chuỗi bị đảo ngược, nhiệm vụ của bạn là nhóm chúng lại với nhau.
Như dưới đây, mảng đã cho là: ["eat", "tea", "tan", "ate", "nat", "bat"], ta phải đưa về một mảng động hai chiều, mỗi một chiều là các String có cùng các chữ cái nhưng bị đảo ngược.
Khi implement trên Java rất ngắn gọn, tôi càng thấy ngôn ngữ lập trình này dễ gần.
Hết rồi, hẹn gặp lai Leetcode vào ngày mai. Cảm ơn bạn.
Như dưới đây, mảng đã cho là: ["eat", "tea", "tan", "ate", "nat", "bat"], ta phải đưa về một mảng động hai chiều, mỗi một chiều là các String có cùng các chữ cái nhưng bị đảo ngược.
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Tính chất đã được gợi ý ở đây của các cặp là đều có cùng các phần tử giống nhau nhưng lại khác vị trí. Bởi vậy nếu ta sắp xếp, ta có thể nhận ra là các phần tử này sau khi sắp xếp đều hoàn toàn giống nhau.["ate","eat","tea"] Sắp xếp thành: ["aet","aet","aet"]
Phần cốt lõi của bài toán nhằm phát hiện ra điều ấy. Giờ ta sẽ tạo một HashMap nơi mà Key chính là một phần tử sau khi sắp xếp, còn Value chính là các mảng 1 chiều. ở đây là các List<String> lưu các phần tử Anagram có cùng khóa Key. Bài toán đã được giải quyết với độ phức tạp thuật toán là O(mlogmxn), trong đó n là chiều dài mảng String, m là chiều dài mỗi phần tử khi sắp xếp.
Khi implement trên Java rất ngắn gọn, tôi càng thấy ngôn ngữ lập trình này dễ gần.
Hết rồi, hẹn gặp lai Leetcode vào ngày mai. Cảm ơn bạn.
Nhận xét
Đăng nhận xét