给定一个包含小写字符的字符串。任务是打印输入字符串出现次数最多的字符。如果 2 个或更多字符出现相同的次数,则打印按字典顺序(按字母顺序)最低的(第一个)字符。
例子:
Input: test sample
Output: e
‘t’, ‘e’ and ‘s’ appears 2 times, but ‘e’ is the lexicographically smallest character.
Input: sample program
Output: a
在上一篇文章中,如果出现最多次数的字符不止一个,则返回任何一个字符。在这篇文章中,返回了所有字符字典序最小的字符。
方法:声明一个freq[26]数组,用作哈希表来存储输入字符串中每个字符的频率。在字符串迭代并为每个字符增加freq[s[i]]的计数。T 从左到右遍历freq[]数组并跟踪到目前为止具有最大频率的字符。 freq[i] 处的值表示字符(i + ‘a’) 的频率。
下面是上述方法的实现:
C++
// C++ implementation to find
// the maximum occurring character in
// an input string which is lexicographically first
#include
using namespace std;
// function to find the maximum occurring character in
// an input string which is lexicographically first
char getMaxOccurringChar(char str[])
{
// freq[] used as hash table
int freq[26] = { 0 };
// to store maximum frequency
int max = -1;
// to store the maximum occurring character
char result;
// length of 'str'
int len = strlen(str);
// get frequency of each character of 'str'
for (int i = 0; i < len; i++)
freq[str[i] - 'a']++;
// for each character, where character is obtained by
// (i + 'a') check whether it is the maximum character
// so far and accodingly update 'result'
for (int i = 0; i < 26; i++)
if (max < freq[i]) {
max = freq[i];
result = (char)(i + 'a');
}
// maximum occurring character
return result;
}
// Driver Code
int main()
{
char str[] = "sample program";
cout << "Maximum occurring character = "
<< getMaxOccurringChar(str);
return 0;
}
Java
// Java implementation to find
// the maximum occurring character in
// an input string which is lexicographically first
class GFG {
// function to find the maximum occurring character in
// an input string which is lexicographically first
static char getMaxOccurringChar(char str[]) {
// freq[] used as hash table
int freq[] = new int[26];
// to store maximum frequency
int max = -1;
// to store the maximum occurring character
char result = 0;
// length of 'str'
int len = str.length;
// get frequency of each character of 'str'
for (int i = 0; i < len; i++) {
if (str[i] != ' ') {
freq[str[i] - 'a']++;
}
}
// for each character, where character is obtained by
// (i + 'a') check whether it is the maximum character
// so far and accodingly update 'result'
for (int i = 0; i < 26; i++) {
if (max < freq[i]) {
max = freq[i];
result = (char) (i + 'a');
}
}
// maximum occurring character
return result;
}
// Driver Code
public static void main(String[] args) {
char str[] = "sample program".toCharArray();
System.out.println("Maximum occurring character = "
+ getMaxOccurringChar(str));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python 3 implementation to find the
# maximum occurring character in an input
# string which is lexicographically first
# function to find the maximum occurring
# character in an input string which is
# lexicographically first
def getMaxOccurringChar(str):
# freq[] used as hash table
freq = [0 for i in range(100)]
# to store maximum frequency
max = -1
# to store the maximum occurring
# character length of 'str'
len__ = len(str)
# get frequency of each character of 'str'
for i in range(0, len__, 1):
freq[ord(str[i]) - ord('a')] += 1
# for each character, where character
# is obtained by (i + 'a') check whether
# it is the maximum character so far and
# accodingly update 'result'
for i in range(26):
if (max < freq[i]):
max = freq[i]
result = chr(ord('a') + i)
# maximum occurring character
return result
# Driver Code
if __name__ == '__main__':
str = "sample program"
print("Maximum occurring character =",
getMaxOccurringChar(str))
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation to find
// the maximum occurring character in
// an input string which is lexicographically first
using System;
class GFG {
// function to find the maximum occurring character in
// an input string which is lexicographically first
static char getMaxOccurringChar(string str) {
// freq[] used as hash table
int[] freq = new int[26];
// to store maximum frequency
int max = -1;
// to store the maximum occurring character
char result = (char)0;
// length of 'str'
int len = str.Length;
// get frequency of each character of 'str'
for (int i = 0; i < len; i++) {
if (str[i] != ' ') {
freq[str[i] - 'a']++;
}
}
// for each character, where character is obtained by
// (i + 'a') check whether it is the maximum character
// so far and accodingly update 'result'
for (int i = 0; i < 26; i++) {
if (max < freq[i]) {
max = freq[i];
result = (char) (i + 'a');
}
}
// maximum occurring character
return result;
}
// Driver Code
public static void Main() {
string str = "sample program";
Console.WriteLine("Maximum occurring character = "
+ getMaxOccurringChar(str));
}
}
Javascript
输出:
Maximum occurring character = a
时间复杂度: O(n)。
辅助空间: O(1)。
资料来源: Sabre 采访体验 | 2套
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。