Java Program to Implement Suffix Array

This Java program is to Implement Suffix arrayIn computer science, a suffix array is a sorted array of all suffixes of a string. It is a simple, yet powerful data structure which is used, among others, in full text indices, data compression algorithms and within the field of bioinformatics.

Here is the source code of the Java program to implement suffix array. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class SuffixArray
{
    private String[] text;
    private int length;
    private int[] index;
    private String[] suffix;
 
    public SuffixArray(String text)
    {
        this.text = new String[text.length()]; 
 
        for (int i = 0; i < text.length(); i++)
        {
            this.text[i] = text.substring(i, i+1);
        } 
 
        this.length = text.length();
        this.index = new int[length];
        for (int i = 0; i < length; i++)
        {
            index[i] = i;
        }	
 
        suffix = new String[length];
    }
 
    public void createSuffixArray()
    {   
        for(int index = 0; index < length; index++)	
        {
            String text = "";
            for (int text_index = index; text_index < length; text_index++)
            {
                text+=this.text[text_index];
            } 
            suffix[index] = text;
        }
 
        int back;
        for (int iteration = 1; iteration < length; iteration++)
        {
            String key = suffix[iteration];
            int keyindex = index[iteration];
 
            for (back = iteration - 1; back >= 0; back--)
            {
                if (suffix[back].compareTo(key) > 0)
                {
                    suffix[back + 1] = suffix[back];
                    index[back + 1] = index[back];
                }
                else
                {
                    break;
                }
            }
            suffix[ back + 1 ] = key;
            index[back + 1 ] = keyindex;
        }
 
        System.out.println("SUFFIX \t INDEX");
        for (int iterate = 0; iterate < length; iterate++)
        {		
            System.out.println(suffix[iterate] + "\t" + index[iterate]);
        }
    }
 
 
    public static void main(String...arg)throws IOException
    {
        String text = "";
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the Text String ");
        text = reader.readLine();
 
        SuffixArray suffixarray = new SuffixArray(text);
        suffixarray.createSuffixArray();
    }	
}
$javac SuffixArray.java
$java SuffixArray
Enter the Text String 
banana
 
SUFFIX 	 INDEX
a         5
ana	  3
anana	  1
banana	  0
na	  4
nana	  2

Related posts:

Java Program to Evaluate an Expression using Stacks
Debug a JavaMail Program
Redirect to Different Pages after Login with Spring Security
Returning Custom Status Codes from Spring Controllers
Functional Interface trong Java 8
Vòng lặp for, while, do-while trong Java
4 tính chất của lập trình hướng đối tượng trong Java
Java Program to Implement Gale Shapley Algorithm
Java Program to Implement Bloom Filter
Java Program to Implement the Vigenere Cypher
An Intro to Spring Cloud Zookeeper
Java Program to Implement Cubic convergence 1/pi Algorithm
Java Program to Implement PriorityQueue API
Transaction Propagation and Isolation in Spring @Transactional
Java Program to Generate All Possible Combinations Out of a, b, c, d, e
Introduction to Spliterator in Java
Count Occurrences of a Char in a String
Java InputStream to Byte Array and ByteBuffer
Java Program to Implement Max Heap
Exploring the New Spring Cloud Gateway
Guide to the Volatile Keyword in Java
Send email with JavaMail
Hướng dẫn Java Design Pattern – Composite
Java Program to Check whether Undirected Graph is Connected using DFS
Java Web Services – JAX-WS – SOAP
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement Regular Falsi Algorithm
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
Hướng dẫn sử dụng luồng vào ra ký tự trong Java
Tính trừu tượng (Abstraction) trong Java
Java Program to Generate Random Numbers Using Multiply with Carry Method
Spring 5 WebClient