Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/1941.html

1941. Check if All Characters Have Equal Number of Occurrences

Level

Easy

Description

Given a string s, return true if s is a good string, or false otherwise.

A string s is good if all the characters that appear in s have the same number of occurrences (i.e., the same frequency).

Example 1:

Input: s = “abacbc”

Output: true

Explanation: The characters that appear in s are ‘a’, ‘b’, and ‘c’. All characters occur 2 times in s.

Example 2:

Input: s = “aaabb”

Output: false

Explanation: The characters that appear in s are ‘a’ and ‘b’. ‘a’ occurs 3 times while ‘b’ occurs 2 times, which is not the same number of times.

Constraints:

  • 1 <= s.length <= 1000
  • s consists of lowercase English letters.

Solution

Use a hash map to store each character’s number of occurrences in s. The length of s should be divisible by the hash map’s size, and each character’s number of occurrences should be the same. In this case, return true. Otherwise, return false.

  • class Solution {
        public boolean areOccurrencesEqual(String s) {
            Map<Character, Integer> map = new HashMap<Character, Integer>();
            int length = s.length();
            for (int i = 0; i < length; i++) {
                char c = s.charAt(i);
                map.put(c, map.getOrDefault(c, 0) + 1);
            }
            int size = map.size();
            if (length % size != 0)
                return false;
            int times = length / size;
            for (Map.Entry<Character, Integer> entry : map.entrySet()) {
                int count = entry.getValue();
                if (count != times)
                    return false;
            }
            return true;
        }
    }
    
    ############
    
    class Solution {
        public boolean areOccurrencesEqual(String s) {
            int[] cnt = new int[26];
            for (char c : s.toCharArray()) {
                ++cnt[c - 'a'];
            }
            int t = 0;
            for (int v : cnt) {
                if (v == 0) {
                    continue;
                }
                if (t == 0) {
                    t = v;
                } else if (t != v) {
                    return false;
                }
            }
            return true;
        }
    }
    
  • // OJ: https://leetcode.com/problems/check-if-all-characters-have-equal-number-of-occurrences/
    // Time: O(N)
    // Space: O(C) where C is the range of the characters
    class Solution {
    public:
        bool areOccurrencesEqual(string s) {
            int cnt[26] = {}, mx = 0;
            for (char c : s) {
                mx = max(mx, ++cnt[c - 'a']);
            }
            for (int i = 0; i < 26; ++i) {
                if (cnt[i] && cnt[i] != mx) return false;
            }
            return true;
        }
    };
    
  • class Solution:
        def areOccurrencesEqual(self, s: str) -> bool:
            cnt = Counter(s)
            return len(set(cnt.values())) == 1
    
    ############
    
    # 1941. Check if All Characters Have Equal Number of Occurrences
    # https://leetcode.com/problems/check-if-all-characters-have-equal-number-of-occurrences/
    
    class Solution:
        def areOccurrencesEqual(self, s: str) -> bool:
            counter = collections.Counter(s)
            values = list(counter.values())
            
            for v in values:
                if v != values[0]: return False
            
            return True
    
    
  • func areOccurrencesEqual(s string) bool {
    	cnt := make([]int, 26)
    	for _, c := range s {
    		cnt[c-'a']++
    	}
    	ss := map[int]bool{}
    	for _, v := range cnt {
    		if v == 0 {
    			continue
    		}
    		ss[v] = true
    	}
    	return len(ss) == 1
    }
    
  • function areOccurrencesEqual(s: string): boolean {
        const cnt: number[] = new Array(26).fill(0);
        for (const c of s) {
            ++cnt[c.charCodeAt(0) - 'a'.charCodeAt(0)];
        }
        let x = 0;
        for (const v of cnt) {
            if (v) {
                if (!x) {
                    x = v;
                } else if (x !== v) {
                    return false;
                }
            }
        }
        return true;
    }
    
    
  • class Solution {
        /**
         * @param String $s
         * @return Boolean
         */
        function areOccurrencesEqual($s) {
            for ($i = 0; $i < strlen($s); $i++) {
                $hashtable[$s[$i]] += 1;
            }
            $rs = array_unique($hashtable);
            return count($rs) === 1;
        }
    }
    

All Problems

All Solutions