-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy path2416-sum-of-prefix-scores-of-strings.js
More file actions
56 lines (51 loc) · 1.34 KB
/
2416-sum-of-prefix-scores-of-strings.js
File metadata and controls
56 lines (51 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* 2416. Sum of Prefix Scores of Strings
* https://leetcode.com/problems/sum-of-prefix-scores-of-strings/
* Difficulty: Hard
*
* You are given an array words of size n consisting of non-empty strings.
*
* We define the score of a string term as the number of strings words[i] such that term is
* a prefix of words[i].
* - For example, if words = ["a", "ab", "abc", "cab"], then the score of "ab" is 2, since
* "ab" is a prefix of both "ab" and "abc".
*
* Return an array answer of size n where answer[i] is the sum of scores of every non-empty
* prefix of words[i].
*
* Note that a string is considered as a prefix of itself.
*/
/**
* @param {string[]} words
* @return {number[]}
*/
var sumPrefixScores = function(words) {
class TrieNode {
constructor() {
this.children = new Map();
this.count = 0;
}
}
const root = new TrieNode();
for (const word of words) {
let node = root;
for (const char of word) {
if (!node.children.has(char)) {
node.children.set(char, new TrieNode());
}
node = node.children.get(char);
node.count++;
}
}
const result = [];
for (const word of words) {
let node = root;
let score = 0;
for (const char of word) {
node = node.children.get(char);
score += node.count;
}
result.push(score);
}
return result;
};