cumulocity-cypress
Version:
Cypress commands for Cumulocity IoT
45 lines (44 loc) • 1.2 kB
JavaScript
class TrieNode {
constructor() {
this.children = new Map();
this.isEndOfWord = false;
this.count = 0;
}
}
function insertWord(root, word) {
let currentNode = root;
for (let i = 0; i < word.length; i++) {
const char = word[i];
if (!currentNode?.children.has(char)) {
currentNode?.children.set(char, new TrieNode());
}
currentNode = currentNode?.children.get(char);
if (currentNode) {
currentNode.count++;
}
}
if (currentNode) {
currentNode.isEndOfWord = true;
}
}
export function shortestUniquePrefixes(words) {
const root = new TrieNode();
const prefixes = [];
for (const word of words) {
insertWord(root, word);
}
for (const word of words) {
let currentNode = root;
let prefix = "";
for (let i = 0; i < word.length; i++) {
const char = word[i];
prefix += char;
currentNode = currentNode?.children.get(char);
if (currentNode && currentNode.count === 1) {
prefixes.push(prefix);
break;
}
}
}
return prefixes;
}