How to generate all trigrams (3-character sequences) from a given word in PHP

1 Answer

0 votes
/*
    -------------------------------------------------------------------------
    What is a trigram?
    -------------------------------------------------------------------------
    A trigram is a sequence of exactly three consecutive characters taken
    from a word. To generate all trigrams, we slide a window of length 3
    across the string. Each step produces a new 3‑character slice.

    Example:
        Word: "magic"
        Trigrams: "mag", "agi", "gic"

    Trigrams are useful in text processing, search algorithms,
    and language modeling because they capture small structural patterns
    inside words.
*/

/*
    Function: makeTrigrams
    ----------------------
    Returns an array containing all trigrams of the given word.

    Steps:
      - If the word is shorter than 3 characters, return an empty array.
      - Otherwise, slide a window of size 3 across the word.
      - Use substr() to extract each 3‑character sequence.

    The algorithm runs in O(n) time and uses O(n) space.
*/
function makeTrigrams(string $word): array
{
    if (strlen($word) < 3) {
        return []; // No trigrams possible
    }

    $count = strlen($word) - 2;
    $result = [];

    for ($i = 0; $i < $count; $i++) {
        $result[] = substr($word, $i, 3);
    }

    return $result;
}

/*
    Main program:
      - Read a word from the user.
      - Generate trigrams.
      - Print each trigram.
*/
echo "Enter a word: ";
$input = trim(fgets(STDIN));

$trigrams = makeTrigrams($input);

echo "\nTrigrams:\n";
foreach ($trigrams as $t) {
    echo $t . "\n";
}


/*
run:

Enter a word: computer

Trigrams:
com
omp
mpu
put
ute
ter

*/

 



answered Sep 9 by avibootz
...