โจทย์
โมเดลภาษาทำงานกับ token ไม่ใช่ข้อความดิบ ตัวตัดคำอย่างง่ายจะแปลงข้อความเป็นตัวพิมพ์เล็ก และถือว่าทุกลำดับของตัวอักษร a-z และตัวเลข 0-9 คือหนึ่งคำ ส่วนอื่นทั้งหมด (ช่องว่าง เครื่องหมายวรรคตอน อักขระอื่น) เป็นตัวคั่นคำ
สร้าง คลังคำศัพท์: คำที่ไม่ซ้ำกัน เรียงตามความถี่ (มากที่สุดก่อน) ถ้าเท่ากันให้เรียงตามตัวอักษร ตำแหน่งของคำในรายการนี้คือ ID ของ token
จง implement build_vocabulary(text)
อินพุต
text: ข้อความใด ๆ
เอาต์พุต
คืนค่าคลังคำศัพท์เป็นรายการคำ ถ้าข้อความไม่มีคำเลย ให้คืนรายการว่าง
เงื่อนไข
0 ≤ ความยาวของ text ≤ 100,000
ตัวอย่าง
อินพุต:
text = "The cat sat on the mat. The end!"
ผลลัพธ์ที่คาดหวัง:
expected = ["the", "cat", "end", "mat", "on", "sat"]
อินพุต:
std::string text = "The cat sat on the mat. The end!";
ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"the", "cat", "end", "mat", "on", "sat"};
อินพุต:
string text = "The cat sat on the mat. The end!";
ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"the", "cat", "end", "mat", "on", "sat"};
คำอธิบาย
เมื่อเป็นตัวพิมพ์เล็ก คำต่าง ๆ คือ the, cat, sat, on, the, mat, the, end โดย "the" ปรากฏ 3 ครั้ง คำอื่นปรากฏคำละครั้งและเรียงตามตัวอักษร: ["the", "cat", "end", "mat", "on", "sat"]
อินพุต:
text = "AI, ai and A.I. (2024)"
ผลลัพธ์ที่คาดหวัง:
expected = ["ai", "2024", "a", "and", "i"]
อินพุต:
std::string text = "AI, ai and A.I. (2024)";
ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"ai", "2024", "a", "and", "i"};
อินพุต:
string text = "AI, ai and A.I. (2024)";
ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"ai", "2024", "a", "and", "i"};
คำอธิบาย
คำ: ai, ai, and, a, i, 2024 โดย "ai" ปรากฏสองครั้ง คำอื่นปรากฏคำละครั้ง เรียงตามตัวอักษรโดยตัวเลขมาก่อนตัวอักษร: ["ai", "2024", "a", "and", "i"]
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน