type MyDictionary = { [key: string]: string[] };
export function groupAndFindLargest(names: string[]) {
if (names.length <= 1) {
return [];
}
// Group names by their first two characters
const groupedNames = names.reduce((groups, name) => {
const prefix = name.slice(0, 2);
if (!groups[prefix]) {
groups[prefix] = [];
}
groups[prefix].push(name);
return groups;
}, {} as MyDictionary);
// Find the largest group
return Object.values(groupedNames).reduce((largest, group) => {
return group.length > largest.length ? group : largest;
}, []);
}
export function findCommonPrefix(names: string[]) {
if (names.length <= 1) {
return '';
}
// Sort the names to ensure that names with the same prefix are adjacent
const sortedNames = [...names].sort();
// Take the first and last elements (lexicographically) as reference points
const firstName = sortedNames[0];
const lastName = sortedNames[sortedNames.length - 1];
// Find the common prefix between the first and last name
let commonPrefix = '';
for (let i = 0; i < firstName.length; i++) {
if (firstName[i] !== lastName[i]) {
break;
}
commonPrefix += firstName[i];
}
return commonPrefix;
}
export function removePrefix(name: string, prefix: string) {
if (name.startsWith(prefix) && name.length > prefix.length)
return name.slice(prefix.length);
return name;
}821300cookie-checkTypescript Find Common Prefix