Back to all solutions

#1392 - Longest Happy Prefix

Problem Description

A string is called a happy prefix if is a non-empty prefix which is also a suffix (excluding itself).

Given a string s, return the longest happy prefix of s. Return an empty string "" if no such prefix exists.

Solution

/**
 * @param {string} s
 * @return {string}
 */
var longestPrefix = function(s) {
  let prefixLength = 0;
  const prefixHash = new Array(s.length).fill(0);

  for (let i = 1; i < s.length; i++) {
    while (prefixLength > 0 && s[i] !== s[prefixLength]) {
      prefixLength = prefixHash[prefixLength - 1];
    }
    if (s[i] === s[prefixLength]) {
      prefixLength++;
    }
    prefixHash[i] = prefixLength;
  }

  return s.slice(0, prefixHash[s.length - 1]);
};