Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ใช้ Counter() ใน Python 3.x หาจำนวนตัวอักษรที่ต้องลบน้อยที่สุดเพื่อทำให้สตริงสองตัวเป็น Anagram


ในบทความนี้ เราจะเรียนรู้เกี่ยวกับวิธีที่เราสามารถทำให้สตริงกลายเป็น pangram โดยใช้ฟังก์ชัน counter() ใน Python 3.x หรือเวอร์ชันก่อนหน้า เพื่อทำเช่นนั้น เราได้รับอนุญาตให้ลบตัวอักษรใดๆ จากอินพุตสตริง เราจะหาจำนวนตัวอักษรที่ต้องลบอย่างน้อยเพื่อทำให้สตริงกลายเป็น anagram

สองสตริงถูกกล่าวว่าเป็น anagram ของกันและกันเมื่อพวกมันมีตัวอักษรชนิดเดียวกันในลำดับสุ่มใดๆ

เมธอด counter() อยู่ในโมดูล collections ที่มีใน Python ข้อกำหนดเบื้องต้นคือต้อง import โมดูล collections เพื่อใช้ฟังก์ชัน counter()

อัลกอริทึม

1. แปลงอินพุตสตริงเป็นประเภท dictionary ที่มีตัวอักษรเป็น keys และความถี่เป็น values โดยใช้ Counter(inp_str) ในโมดูล collections
2. นับจำนวน keys ทั้งหมด และนับจำนวน keys ที่ซ้ำกันในทั้งสอง dictionary ที่แปลงมาจากอินพุตสตริง
3. ถ้าไม่พบ common keys หมายความว่าต้องลบ (ผลรวมของความยาวทั้งสอง dictionary) ตัวอักษรจากทั้งสองอินพุตสตริง
4. มิฉะนั้น (max(ความยาวทั้งสอง dictionary) - จำนวน common keys ที่มีอยู่) จะให้จำนวนตัวอักษรที่ต้องลบที่จำเป็น

collections.Counter เป็น subclass ของ dictionary เพื่อให้แน่ใจว่าตัวอักษรถูกนับโดยอัตโนมัติโดย interpreter เราไม่จำเป็นต้องสร้าง substring หรือตรวจสอบว่าพวกมันเป็น anagram ด้วยตนเอง

ตัวอย่าง

# สองสตริงกลายเป็น anagram
from collections import Counter

def convertAnagram(str_1, str_2):
    # การแปลงสตริงเป็น dictionary type
    dict_1 = Counter(str_1)
    dict_2 = Counter(str_2)
    keys_1 = dict_1.keys()
    keys_2 = dict_2.keys()
    # นับจำนวน keys ในทั้งสองลิสต์ของ keys
    count_1 = len(keys_1)
    count_2 = len(keys_2)
    # แปลงคู่ของ keys เป็น set เพื่อหา common keys
    set_1 = set(keys_1)
    commonKeys = len(set_1.intersection(keys_2))
    if (commonKeys == 0): # ไม่พบสิ่งทั่วไป คือ ทุกอย่างแตกต่างกัน
        return (count_1 + count_2)
    else: # บางองค์ประกอบตรงกันในอินพุต
        return (max(count_1, count_2) - commonKeys)

str_1 = 'Tutorials'
str_2 = 'sTutalori'
str_3 = 'Point'
print(convertAnagram(str_1, str_2))
print(convertAnagram(str_3, str_2))

ผลลัพธ์

0
6

สรุป

ในบทความนี้ เราได้เรียนรู้วิธีที่เราสามารถทำให้สตริงสองตัวกลายเป็น anagram ของกันและกันโดยการนับจำนวนตัวอักษรที่จำเป็นสำหรับการรักษาความสัมพันธ์ anagram ใน Python 2.x ที่จำเป็น