Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra Anagram trong Python với collections.Counter

Hai chuỗi là anagram (hoán vị từ) nếu chúng chứa cùng các ký tự với tần suất giống nhau, chỉ khác thứ tự. Ví dụ: "listen" và "silent".

Cách dùng collections.Counter

Counter đếm tần suất từng phần tử, trả về dict-like object. So sánh 2 Counter để kiểm tra anagram.

from collections import Counter

str1 = 'top spot'
str2 = 'pot post'

counter1 = Counter(str1)
counter2 = Counter(str2)

print("Counter 1:", counter1)
print("Counter 2:", counter2)

if counter1 == counter2:
    print("Hai chuỗi là anagram")
else:
    print("Hai chuỗi KHÔNG phải anagram")

Kết quả

Counter 1: Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
Counter 2: Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
Hai chuỗi là anagram

Xử lý case-insensitive và bỏ qua khoảng trắng

def is_anagram(s1, s2):
    # Chuẩn hóa: lower, bỏ space
    clean1 = s1.replace(' ', '').lower()
    clean2 = s2.replace(' ', '').lower()
    return Counter(clean1) == Counter(clean2)

print(is_anagram("Listen", "Silent"))      # True
print(is_anagram("A gentleman", "Elegant man"))  # True
print(is_anagram("Hello", "World"))        # False

Cách khác: sorted()

def is_anagram_sorted(s1, s2):
    return sorted(s1.replace(' ', '').lower()) == sorted(s2.replace(' ', '').lower())

So sánh

Phương phápĐộ phức tạpƯu điểm
CounterO(n)Nhanh, trực quan, có thêm most_common()
sorted()O(n log n)Không cần import, code ngắn

Khuyến nghị: Dùng Counter cho hiệu năng và tính năng mở rộng.