Find and Replace Pattern

MediumArrayHash TableString

Solution

export function findAndReplacePattern(words: string[], pattern: string): string[] {
  const p = normalize(pattern);
  return words.filter((word) => isEqual(p, normalize(word)));
}
 
function normalize(word: string): number[] {
  const result = [];
  const map = new Map<string, number>();
  for (let i = 0; i < word.length; i++) {
    const id = map.get(word[i]) ?? map.size;
    map.set(word[i], id);
    result.push(id);
  }
  return result;
}
 
function isEqual<T>(arr1: T[], arr2: T[]): boolean {
  if (arr1.length !== arr2.length) {
    return false;
  }
  for (let i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) {
      return false;
    }
  }
  return true;
}