Skip to content

Commit 3056f51

Browse files
committed
add leetcode 2306
1 parent 39c6648 commit 3056f51

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

strings/2306-naming-a-company.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* @param {string[]} ideas
3+
* @return {number}
4+
* Time O(n * m)
5+
* Space O(n * m)
6+
*/
7+
const distinctNames = function (ideas) {
8+
let ideaMap = {};
9+
10+
for (let idea of ideas) {
11+
let firstCharacter = idea.slice(0, 1);
12+
let remainingCharacters = idea.slice(1);
13+
if (!ideaMap[firstCharacter]) ideaMap[firstCharacter] = new Set();
14+
ideaMap[firstCharacter].add(remainingCharacters);
15+
}
16+
17+
let ideaMapKeys = Object.keys(ideaMap);
18+
let resultCount = 0;
19+
20+
for (let i = 0; i < ideaMapKeys.length; i++) {
21+
let firstSet = ideaMap[ideaMapKeys[i]];
22+
for (let j = i + 1; j < ideaMapKeys.length; j++) {
23+
let secondSet = ideaMap[ideaMapKeys[j]];
24+
let commonCount = 0;
25+
for (let character of firstSet) {
26+
if (secondSet.has(character)) commonCount++;
27+
}
28+
resultCount +=
29+
2 * (firstSet.size - commonCount) * (secondSet.size - commonCount);
30+
}
31+
}
32+
33+
return resultCount;
34+
};
35+
36+
// Brute Force
37+
// var distinctNames = function(ideas) {
38+
// const set = new Set([...ideas]);
39+
// let result = 0;
40+
41+
// for (let i = 0; i < ideas.length; i++) {
42+
// for (let j = 0; j < ideas.length; j++) {
43+
// if (i === j) continue;
44+
// const ideaA = ideas[i].split("");
45+
// const ideaB = ideas[j].split("");
46+
// const firstLetterA = ideaA.shift();
47+
// const firstLetterB = ideaB.shift();
48+
// const newIdeaA = [firstLetterB, ...ideaA].join("");
49+
// const newIdeaB = [firstLetterA, ...ideaB].join("");
50+
51+
// if (set.has(newIdeaA) || set.has(newIdeaB)) continue;
52+
// result++;
53+
// }
54+
// }
55+
// return result;
56+
// };

0 commit comments

Comments
 (0)