LeetCode-in-Java

3889. Mirror Frequency Distance

Medium

You are given a string s consisting of lowercase English letters and digits.

For each character, its mirror character is defined by reversing the order of its character set:

For each unique character c in the string:

The mirror pairs (c, m) and (m, c) are the same and must be counted only once.

Return an integer denoting the total sum of these values over all such distinct mirror pairs.

Example 1:

Input: s = “ab1z9”

Output: 3

Explanation:

For every mirror pair:

c m freq(c) freq(m) \|freq(c) - freq(m)\|
a z 1 1 0
b y 1 0 1
1 8 1 0 1
9 0 1 0 1

Thus, the answer is 0 + 1 + 1 + 1 = 3.

Example 2:

Input: s = “4m7n”

Output: 2

Explanation:

c m freq(c) freq(m) \|freq(c) - freq(m)\|
4 5 1 0 1
m n 1 1 0
7 2 1 0 1

Thus, the answer is 1 + 0 + 1 = 2.

Example 3:

Input: s = “byby”

Output: 0

Explanation:

c m freq(c) freq(m) \|freq(c) - freq(m)\|
b y 2 2 0

Thus, the answer is 0.

Constraints:

Solution

public class Solution {
    public int mirrorFrequency(String s) {
        int[] freq = new int[257];
        int n = s.length();
        for (int i = 0; i < n; i++) {
            char curr = s.charAt(i);
            freq[curr]++;
        }
        int ans = 0;
        for (int i = 'a'; i <= 'z'; i++) {
            if (freq[i] > 0) {
                ans = ans + Math.abs(freq[i] - freq['z' - (i - 'a')]);
                freq[i] = 0;
                freq['z' - (i - 'a')] = 0;
            }
        }
        for (int i = '0'; i <= '9'; i++) {
            if (freq[i] > 0) {
                ans = ans + Math.abs(freq[i] - freq['9' - (i - '0')]);
                freq[i] = 0;
                freq['9' - (i - '0')] = 0;
            }
        }
        return ans;
    }
}