Search code examples
javaalgorithmhistogram

How to find the most frequently occurring character in a string with Java?


Given a paragraph as input, find the most frequently occurring character. Note that the case of the character does not matter. If more than one character has the same maximum occurring frequency, return all of them I was trying this question but I ended up with nothing. Following is the code that I tried but it has many errors I am unable to correct:

public class MaximumOccuringChar {

    static String testcase1 = "Hello! Are you all fine? What are u doing today? Hey Guyz,Listen! I have a plan for today.";

    public static void main(String[] args) 
    {
        MaximumOccuringChar test = new MaximumOccuringChar();
        char[] result = test.maximumOccuringChar(testcase1);
        System.out.println(result);
    }

    public char[] maximumOccuringChar(String str) 
    {
        int temp = 0;
        int count = 0;
        int current = 0;

        char[] maxchar = new char[str.length()];

        for (int i = 0; i < str.length(); i++) 
        {
            char ch = str.charAt(i);

            for (int j = i + 1; j < str.length(); j++) 
            {
                char ch1 = str.charAt(j);

                if (ch != ch1) 
                {
                    count++;
                }
            }

            if (count > temp) 
            {
                temp = count;
                maxchar[current] = ch;
                current++;
            }
        }
        return maxchar;
    }
}

Solution

  • You already got your answer here: https://stackoverflow.com/a/21749133/1661864

    It's a most easy way I can imagine.

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class MaximumOccurringChar {
    
        static final String TEST_CASE_1 = "Hello! Are you all fine? What are u doing today? Hey Guyz,Listen! I have a plan for today. Help!";
    
    
        public static void main(String[] args) {
            MaximumOccurringChar test = new MaximumOccurringChar();
            List<Character> result = test.maximumOccurringChars(TEST_CASE_1, true);
            System.out.println(result);
        }
    
    
        public List<Character> maximumOccurringChars(String str) {
            return maximumOccurringChars(str, false);
        }
    
        // set skipSpaces true if you want to skip spaces
        public List<Character> maximumOccurringChars(String str, Boolean skipSpaces) {
            Map<Character, Integer> map = new HashMap<>();
            List<Character> occurrences = new ArrayList<>();
            int maxOccurring = 0;
    
            // creates map of all characters
            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);
    
                if (skipSpaces && ch == ' ')      // skips spaces if needed
                    continue;
    
                if (map.containsKey(ch)) {
                    map.put(ch, map.get(ch) + 1);
                } else {
                    map.put(ch, 1);
                }
    
                if (map.get(ch) > maxOccurring) {
                    maxOccurring = map.get(ch);         // saves max occurring
                }
            }
    
            // finds all characters with maxOccurring and adds it to occurrences List
            for (Map.Entry<Character, Integer> entry : map.entrySet()) {
                if (entry.getValue() == maxOccurring) {
                    occurrences.add(entry.getKey());
                }
            }
    
            return occurrences;
        }
    }