Cho chuỗi str. Tìm ký tự có tần suất xuất hiện nhiều thứ hai.
Ví dụ
Input: "abaacabcba"
Output: 'b'
Phương pháp giải
Tạo mảng charFreq[256] đếm tần suất từng ký tự. Duyệt mảng tìm maxFreq và secFreq (tần suất lớn thứ 2, khác maxFreq). Trả về ký tự ứng với secFreq.
Ví dụ minh họa (C++)
#include <iostream>
#include <string.h>
using namespace std;
char findSecFreqChar(string str) {
int charFreq[256] = {0};
for (int i = 0; i < str.length(); i++)
(charFreq[str[i]])++;
int maxFreq = 0, secFreq = 0;
for (int i = 0; i < 256; i++) {
if (charFreq[i] > charFreq[maxFreq]) {
secFreq = maxFreq;
maxFreq = i;
} else if (charFreq[i] > charFreq[secFreq] && charFreq[i] != charFreq[maxFreq]) {
secFreq = i;
}
}
return secFreq;
}
int main() {
string str = "tutorialspoint";
char secFreqChar = findSecFreqChar(str);
cout << "Second most frequent character of the string is " << secFreqChar;
return 0;
}
Đầu ra
Second most frequent character of the string is i