กลับไปยังโจทย์
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

คะแนนตัวอักษรในคำ

บวกค่าคะแนนของแต่ละตัวอักษรในคำหนึ่งคำ

สิ่งที่คุณจะได้เรียนรู้

  • เก็บคะแนนตัวอักษรในดิกชันนารี
  • รวมคะแนนของทุกตัวอักษร
  • ไม่สนตัวพิมพ์เล็กใหญ่

โจทย์

บวกค่าคะแนนของแต่ละตัวอักษรในคำหนึ่งคำ ไม่สนใจตัวพิมพ์เล็กหรือใหญ่ ไม่มีตัวคูณคะแนนบนกระดานหรือไทล์ตัวแทน (wildcard)

ค่าคะแนนของตัวอักษร:

A, E, I, O, U, L, N, R, S, T: ตัวละ 1 คะแนน

D, G: ตัวละ 2 คะแนน

B, C, M, P: ตัวละ 3 คะแนน

F, H, V, W, Y: ตัวละ 4 คะแนน

K: 5 คะแนน J, X: ตัวละ 8 คะแนน Q, Z: ตัวละ 10 คะแนน

ให้เขียนฟังก์ชัน word_tile_score(word)

อินพุต

word: คำที่ต้องการคำนวณคะแนน

เอาต์พุต

คืนค่าผลรวมคะแนนของตัวอักษรทั้งหมดในคำนั้น

เงื่อนไข

0 ≤ ความยาวของ word ≤ 10,000 มีเฉพาะตัวอักษรภาษาอังกฤษแบบ ASCII เท่านั้น ถ้าอินพุตว่างให้คืนค่า 0

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
word = "code"

ผลลัพธ์ที่คาดหวัง:
expected = 7
อินพุต:
std::string word = "code";

ผลลัพธ์ที่คาดหวัง:
long long expected = 7;
อินพุต:
string word = "code";

ผลลัพธ์ที่คาดหวัง:
long expected = 7;

คำอธิบาย

C มีค่า 3, O มีค่า 1, D มีค่า 2, และ E มีค่า 1: 3 + 1 + 2 + 1 = 7

ตัวอย่างที่ 2
อินพุต:
word = "Quiz"

ผลลัพธ์ที่คาดหวัง:
expected = 22
อินพุต:
std::string word = "Quiz";

ผลลัพธ์ที่คาดหวัง:
long long expected = 22;
อินพุต:
string word = "Quiz";

ผลลัพธ์ที่คาดหวัง:
long expected = 22;

คำอธิบาย

ตัวพิมพ์เล็กหรือใหญ่ไม่มีผล Q + U + I + Z ได้ 10 + 1 + 1 + 10 = 22

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

ตัวอักษรแต่ละตัวมีคะแนนตายตัว จึงหาคะแนนคำโดยบวกค่าน้ำหนักของแต่ละตัวอักษร

คำใบ้ 2

ใช้ lookup table แบบไม่สนตัวพิมพ์เล็กใหญ่จะทำให้แมปง่ายและเร็ว

คำใบ้ 3

อย่าลืมครอบคลุมตัวอักษรที่อนุญาตทุกตัว รวมถึงไทล์คะแนนสูงอย่าง Q และ Z

ความซับซ้อนที่คาดหวัง

เวลา O(n), หน่วยความจำเพิ่ม O(1)

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก