Hướng giải của Thống kê chữ cái
Nhớ rằng hướng dẫn giải này chỉ nên sử dụng khi bế tắc, và tuyệt đối không nên sao chép mã nguồn kèm theo. Hãy tôn trọng tác giả bài tập và người viết hướng dẫn giải.
Nộp mã nguồn lời giải chính thức trước khi giải bài tập đó có thể khiến bạn bị ban.
Nộp mã nguồn lời giải chính thức trước khi giải bài tập đó có thể khiến bạn bị ban.
Tác giả:
Lời giải: Thống kê chữ cái
Phân tích
Bài toán yêu cầu đếm tần suất xuất hiện của 26 chữ cái trong xâu \(S\). Ta sử dụng mảng đếm 26 phần tử, duyệt từng ký tự của \(S\) và tăng biến đếm tương ứng.
Độ phức tạp
- Thời gian: O(N)
- Không gian: O(26)
Code mẫu C++
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
// Mảng đếm 26 ký tự từ 'a' đến 'z'
vector<int> cnt(26, 0);
for (char c : s) {
cnt[c - 'a']++; // Tăng biến đếm cho ký tự tương ứng
}
// In kết quả: cnt[0] là 'a', cnt[1] là 'b', ...
for (int i = 0; i < 26; i++) {
cout << cnt[i] << (i == 25 ? '\n' : ' ');
}
return 0;
}
Giải thích
cnt[c - 'a']: chuyển ký tựcthành chỉ số trong mảng (ví dụ'a' - 'a' = 0,'b' - 'a' = 1).- Vòng lặp for duyệt qua 26 ký tự và in ra tần suất tương ứng.
- Dấu
'\n'chỉ in ở phần tử cuối cùng để xuống dòng đúng định dạng.
Nhận xét