给定一个包含小写英文字符的字符串S ,任务是查找字符串中所有字符的出现频率。
例子:
Input: S=”geeksforgeeks”
Output:
e – 4
f – 1
g – 2
k – 2
o – 1
r – 1
s – 2
Input: S=”gfg”
Output:
f – 1
g – 2
方法:按照以下步骤解决问题:
- 初始化数组freq []以存储给定字符串中每个字母的频率。第0个索引存储字符’ a’的频率,第1个索引存储字符’b’的频率,依此类推。
- 迭代指定字符串S和递增1遇到的每个字符的频率,通过进行频率[S [I] – “A”] + = 1。如果S [i] =’a’ ,则S [i]-‘a’等于0,因此’a’的频率在数组中增加。
- 字符串的完整遍历后,通过遍历阵列FREQ打印字符串中的所有字符的频率[]。
下面是上述方法的实现:
C
// C program for the above approach
#include
#include
// Function to print the frequencies
// of each character of the string
void printFrequency(int freq[])
{
for (int i = 0; i < 26; i++) {
// If frequency of the
// alphabet is non-zero
if (freq[i] != 0) {
// Print the character and
// its respective frequency
printf("%c - %d\n",
i + 'a', freq[i]);
}
}
}
// Function to calculate the frequencies
// of each character of the string
void findFrequncy(char S[])
{
int i = 0;
// Stores the frequencies
// of each character
int freq[26] = { 0 };
// Traverse over the string
while (S[i] != '\0') {
// Increment the count of
// each character by 1
freq[S[i] - 'a']++;
// Increment the index
i++;
}
// Function call to print
// the frequencies
printFrequency(freq);
}
// Driver Code
int main()
{
char S[100] = "geeksforgeeks";
findFrequncy(S);
}
输出:
e - 4
f - 1
g - 2
k - 2
o - 1
r - 1
s - 2
时间复杂度: O(N)
辅助空间: O(26)
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。