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

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.
*/

import java.util.Scanner

/*
    Function: makeTrigrams
    ----------------------
    Returns a list containing all trigrams of the given word.

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

    The algorithm runs in O(n) time and uses O(n) space.
*/
fun makeTrigrams(word: String): List<String> {
    if (word.length < 3) {
        return emptyList() // No trigrams possible
    }

    val count = word.length - 2
    val result = ArrayList<String>(count)

    for (i in 0 until count) {
        result.add(word.substring(i, i + 3))
    }

    return result
}

/*
    Main program:
      - Read a word from the user.
      - Generate trigrams.
      - Print each trigram.
*/
fun main() {
    val scanner = Scanner(System.`in`)

    print("Enter a word: ")
    val input: String = scanner.nextLine().trim()

    val trigrams: List<String> = makeTrigrams(input)

    println("\nTrigrams:")
    for (t in trigrams) {
        println(t)
    }
}


/*
run:

Enter a word: computer

Trigrams:
com
omp
mpu
put
ute
ter

*/

 



answered Sep 9 by avibootz

Related questions

...