โจทย์
ให้สตริงตัวพิมพ์เล็ก ต้องการพิมพ์ตัวอักษรแต่ละตัวและความถี่ ตามลำดับที่ปรากฏในสตริง
ตัวอย่าง: "jskdk" → j 1, s 1, k 2, d 1
อัลกอริทึม
Step 1: สร้างอาร์เรย์ขนาด 26 เก็บความถี่ Step 2: ลูปผ่านสตริง นับความถี่ Step 3: ลูปผ่านสตริงอีกครั้ง ถ้าความถี่ > 0 พิมพ์ตัวอักษรและความถี่ แล้วเซ็ตความถี่เป็น 0 (กันพิมพ์ซ้ำ)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "tutorialspoint";
int n = str.size();
int frequency[26];
memset(frequency, 0, sizeof(frequency));
for (int i = 0; i < n; i++)
frequency[str[i] - 'a']++;
for (int i = 0; i < n; i++) {
if (frequency[str[i] - 'a'] != 0) {
cout << str[i] << "\t" << frequency[str[i] - 'a'] << "\n";
frequency[str[i] - 'a'] = 0;
}
}
return 0;
}
ผลลัพธ์
t 3 u 1 o 2 r 1 i 2 a 1 l 1 s 1 p 1 n 1