Daily 13/01/2024: [1347. Minimum Number of Steps to Make Two Strings Anagram](https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/) # 1. Tóm tắt đề bài Bạn được cho hai chuỗi có cùng độ dài ```s``` và ```t```. Trong một thao tác, bạn có thể chọn bất kỳ ký tự nào của ```t``` và thay thế nó bằng một ký tự khác. Trả về số thao tác tối thiểu để biến t thành ***anagram*** của s. ***Anagram*** của một chuỗi là một chuỗi chứa các ký tự giống nhau với thứ tự khác (hoặc giống nhau). #### Giới hạn - $1 \le$ ```s.length``` $\le 5 \cdot 10^4$ - $1 \le$ ```s.length == t.length``` $\le 10^9$ - ```s``` và ```t``` chỉ bao gồm chữ cái tiếng anh thường # 2. Tóm tắt lời giải #### Phân tích - Bài này thực ra chỉ là đếm số chữ cái khác nhau mà thôi, tức là sau khi lọc hết các chữ cái giống nhau của cả hai từ thì chỉ cần thay đổi các chữ cái còn lại của```t``` thành các chữ cái còn lại của ```s```. - Một trong những chiến thuật được sử dụng là Hash Map, đơn giản là chúng ta sẽ đếm số lượng từng chữ cái của mỗi từ rồi tìm sự chênh lệch của chúng. Sau đó tính tổng rồi chia đôi. # 3. Lời giải chi tiết - - Một cách khác là chúng ta chỉ cần dùng một cấu trúc dữ liệu Hash Map và lưu giá trị chênh lệch luôn, tức là với mọi ```t[i]``` thì cộng 1 và ```s[i]``` thì trừ 1. #### Code ```python class Solution: def minSteps(self, s: str, t: str) -> int: counter = defaultdict(int) for i in range(len(s)): counter[t[i]] += 1 counter[s[i]] -= 1 ans = 0 for i in range(26): ans += max(0, counter[chr(i + ord('a'))]) return ans ``` #### Độ phức tạp $O(n)$ # 4. Kết luận & gợi ý mở rộng - Bài này khá bài bản về Hash Map > Hãy dùng nghị lực và sự kiên trì để đánh bại mọi thứ. ###### #Hashtag: <span style='color: blue'>Hash Map</span>