นับตัวอักษรด้วยตารางความถี่
นับตัวอักษรโดยใช้ dict หรืออาร์เรย์
นับตัวอักษรด้วยตารางความถี่ เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องนับอักขระ
ปัญหาเกี่ยวกับสตริงจำนวนมากสรุปได้เป็นคำถามเดียวว่า อักขระแต่ละตัวปรากฏบ่อยเพียงใด ตารางความถี่จะตอบคำถามนี้ได้ด้วยการตรวจดูเพียงรอบเดียว 📊
วิธีใช้พจนานุกรม
dict แบบพื้นฐานจะจับคู่อักขระแต่ละตัวกับจำนวนครั้งที่พบ ใช้ได้กับชุดตัวอักษรทุกแบบ รวมถึงยูนิโค้ดและสัญลักษณ์
freq = {}
for ch in 'apple':
freq[ch] = freq.get(ch, 0) + 1
print(freq)get() หลีกเลี่ยง KeyError
การใช้ get(ch, 0) จะคืนค่า 0 เมื่อไม่พบคีย์ ดังนั้นครั้งแรกที่พบตัวอักษรจึงเริ่มนับได้อย่างถูกต้องที่หนึ่ง
Counter จัดการให้คุณ
คลาส Counter จาก collections จะสร้างตารางทั้งหมดให้ในบรรทัดเดียว เป็นตัวเลือกยอดนิยมในการแข่งขันเพราะทั้งเร็วและอ่านเข้าใจง่าย
from collections import Counter
freq = Counter('apple')
print(freq['p']) # 2คีย์ที่ไม่พบจะคืนค่าศูนย์
Counter จะไม่ทำให้เกิดข้อผิดพลาดเมื่อไม่พบคีย์ การขอตัวอักษรที่ไม่เคยพบจะให้ค่า 0 ทำให้โค้ดไม่ต้องแยกแขนง
from collections import Counter
c = Counter('abc')
print(c['z']) # 0วิธีใช้อาร์เรย์ขนาดคงที่
หากมีเฉพาะตัวอักษรพิมพ์เล็ก ลิสต์ขนาด 26 ช่องจะเร็วกว่าเดิม ใช้การคำนวณจาก ord เพื่อหาดัชนีตัวอักษร แล้วเพิ่มตัวนับ
cnt = [0] * 26
for ch in 'apple':
cnt[ord(ch) - ord('a')] += 1ข้อแลกเปลี่ยนระหว่างอาร์เรย์กับพจนานุกรม
อาร์เรย์เร็วที่สุด แต่เหมาะเฉพาะกับชุดตัวอักษรขนาดเล็กที่ทราบแน่นอน ส่วนพจนานุกรมหรือ Counter รองรับอักขระทุกแบบโดยแลกกับต้นทุนเล็กน้อย
ค้นหาค่าที่พบบ่อยที่สุด
Counter มี most_common(k) ซึ่งคืนอักขระ k อันดับแรกที่เรียงตามความถี่ไว้แล้ว ไม่ต้องเรียงลำดับด้วยตนเอง
from collections import Counter
print(Counter('mississippi').most_common(1))เปรียบเทียบตารางสองตาราง
สตริงสองชุดเป็นแอนาแกรมก็ต่อเมื่อตารางความถี่ของทั้งคู่ตรงกัน การเปรียบเทียบ Counter สองตัวทำได้ในบรรทัดเดียว
from collections import Counter
print(Counter('listen') == Counter('silent')) # Trueวนรอบเดียวก็เพียงพอ
การสร้างตารางใช้เวลา O(n) ซึ่งเป็นการตรวจดูสตริงเพียงครั้งเดียว หลังจากนั้นการค้นหาแต่ละครั้งจะใช้เวลาคงที่
ลบเพื่อหาส่วนที่เกิน
Counter รองรับการลบ คุณจึงตรวจพบได้ว่าสตริงหนึ่งมีอักขระใดที่อีกสตริงไม่มี เหมาะสำหรับโจทย์ลักษณะการสร้างข้อความจากตัวอักษรที่มีอยู่
from collections import Counter
print(Counter('aabb') - Counter('ab'))ตรวจสอบอย่างรวดเร็ว
คำถามหนึ่งข้อเกี่ยวกับการนับอักขระ
ทบทวน
ตอนนี้คุณสามารถนับอักขระด้วยdict ด้วย Counter หรือด้วยอาร์เรย์ขนาด 26 ช่อง และใช้ตารางเหล่านี้ตรวจสอบแอนาแกรมหรือค้นหาตัวอักษรที่พบบ่อยได้ 🎉
คำถามที่พบบ่อย
บทเรียน “นับตัวอักษรด้วยตารางความถี่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “นับตัวอักษรด้วยตารางความถี่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “นับตัวอักษรด้วยตารางความถี่”
นับตัวอักษรโดยใช้ dict หรืออาร์เรย์ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “นับตัวอักษรด้วยตารางความถี่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เทคนิค Characters, ord และ chr
- นับตัวอักษรด้วยตารางความถี่
- ตรวจสอบพาลินโดรมอย่างถูกต้อง
- แยก ตัดช่องว่าง และประกอบคำใหม่