2023-02-09 Daily Challenge
Today I have done leetcode's February LeetCoding Challenge with cpp
.
February LeetCoding Challenge 9
Description
Naming a Company
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:
- Choose 2 distinct names from
ideas
, call themideaA
andideaB
. - Swap the first letters of
ideaA
andideaB
with each other. - If both of the new names are not found in the original
ideas
, then the nameideaA ideaB
(the concatenation ofideaA
andideaB
, separated by a space) is a valid company name. - Otherwise, it is not a valid name.
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:
2 <= ideas.length <= 5 * 104
1 <= ideas[i].length <= 10
ideas[i]
consists of lowercase English letters.- All the strings in
ideas
are unique.
Solution
class Solution {
public:
long long distinctNames(vector<string>& ideas) {
long long answer = 0;
unordered_set<string> suffixes[26];
for(const auto &idea : ideas) {
suffixes[idea[0] - 'a'].insert(idea.substr(1));
}
for(int i = 0; i < 25; ++i) {
for(int j = i + 1; j < 26; ++j) {
int same = 0;
for(const auto &suffix : suffixes[i]) {
if(suffixes[j].count(suffix)) {
same += 1;
}
}
answer += 2 * (suffixes[i].size() - same) * (suffixes[j].size() - same);
}
}
return answer;
}
};
// Accepted
// 89/89 cases passed (458 ms)
// Your runtime beats 90.24 % of cpp submissions
// Your memory usage beats 43.9 % of cpp submissions (83.4 MB)