โจทย์
นับจำนวนของตัวอักษรทุกตัวใน text ยกเว้นช่องว่าง รายงานแต่ละตัวอักษรที่ไม่ซ้ำกันเพียงครั้งเดียวในรูปแบบ "character:count" โดยเรียงตามรหัสตัวอักษร (ดังนั้นตัวพิมพ์ใหญ่จะมาก่อนตัวพิมพ์เล็ก)
ให้เขียนฟังก์ชัน character_frequency(text)
อินพุต
text: ข้อความที่ต้องการนับ (ตัวอักษร ASCII)
เอาต์พุต
คืนค่ารายการ "character:count" ของแต่ละตัวอักษร
เงื่อนไข
0 ≤ ความยาว ≤ 10,000
ตัวอย่าง
อินพุต:
text = "hello"
ผลลัพธ์ที่คาดหวัง:
expected = ["e:1", "h:1", "l:2", "o:1"]
อินพุต:
std::string text = "hello";
ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"e:1", "h:1", "l:2", "o:1"};
อินพุต:
string text = "hello";
ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"e:1", "h:1", "l:2", "o:1"};
คำอธิบาย
e:1, h:1, l:2, o:1 เรียงตามตัวอักษร: ["e:1", "h:1", "l:2", "o:1"]
อินพุต:
text = "a a A"
ผลลัพธ์ที่คาดหวัง:
expected = ["A:1", "a:2"]
อินพุต:
std::string text = "a a A";
ผลลัพธ์ที่คาดหวัง:
std::vector<std::string> expected = {"A:1", "a:2"};
อินพุต:
string text = "a a A";
ผลลัพธ์ที่คาดหวัง:
string[] expected = new string[] {"A:1", "a:2"};
คำอธิบาย
ข้ามช่องว่าง; "A" จะเรียงก่อน "a": ["A:1", "a:2"]
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
ข้ามช่องว่าง แต่ให้นับอักขระ ASCII อื่นทุกตัวตามที่ปรากฏ
คำใบ้ 2
เก็บจำนวนใน frequency table แล้วค่อยแสดงอักขระที่ไม่ซ้ำครั้งเดียว
คำใบ้ 3
เรียงตามรหัสตัวอักษรเพื่อให้ลำดับตัวพิมพ์ใหญ่เล็กเป็นไปตาม ASCII
ความซับซ้อนที่คาดหวัง
เวลา O(n + m log m), หน่วยความจำเพิ่ม O(m)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน