2306. Naming a Company

Difficulty:
Related Topics:
Similar Questions:

    Problem

    You are given an array of strings ideas that represents a list of names to be used in the process of naming a company. The process of naming a company is as follows:

    Return **the number of *distinct* valid names for the company**.

      Example 1:

    Input: ideas = ["coffee","donuts","time","toffee"]
    Output: 6
    Explanation: The following selections are valid:
    - ("coffee", "donuts"): The company name created is "doffee conuts".
    - ("donuts", "coffee"): The company name created is "conuts doffee".
    - ("donuts", "time"): The company name created is "tonuts dime".
    - ("donuts", "toffee"): The company name created is "tonuts doffee".
    - ("time", "donuts"): The company name created is "dime tonuts".
    - ("toffee", "donuts"): The company name created is "doffee tonuts".
    Therefore, there are a total of 6 distinct company names.
    
    The following are some examples of invalid selections:
    - ("coffee", "time"): The name "toffee" formed after swapping already exists in the original array.
    - ("time", "toffee"): Both names are still the same after swapping and exist in the original array.
    - ("coffee", "toffee"): Both names formed after swapping already exist in the original array.
    

    Example 2:

    Input: ideas = ["lack","back"]
    Output: 0
    Explanation: There are no valid selections. Therefore, 0 is returned.
    

      Constraints:

    Solution

    class Solution {
        private long count(Map<Character, Set<String>> map, char a, char b) {
            if (!map.containsKey(a) || !map.containsKey(b)) {
                return 0;
            }
            long common = 0;
            Set<String> first = map.get(a);
            Set<String> second = map.get(b);
            for (String c : first) {
                if (second.contains(c)) {
                    common++;
                }
            }
            long uniqueA = first.size() - common;
            long uniqueB = second.size() - common;
            return uniqueA * uniqueB * 2L;
        }
    
        public long distinctNames(String[] ideas) {
            long ans = 0;
            Map<Character, Set<String>> map = new HashMap<>();
            for (String idea : ideas) {
                char startChar = idea.charAt(0);
                Set<String> values = map.getOrDefault(startChar, new HashSet<>());
                values.add(idea.substring(1));
                map.put(startChar, values);
            }
            for (int i = 0; i <= 26; i++) {
                for (int j = i + 1; j <= 26; j++) {
                    long unique = count(map, (char) (i + 'a'), (char) (j + 'a'));
                    ans += unique;
                }
            }
            return ans;
        }
    }
    

    Explain:

    nope.

    Complexity: