Java Program to Implement Word Wrap Problem

This Java program Implements Word Wrap Problem.A Given a sequence of words, and a limit on the number of characters that can be put in one line (line width). Put line breaks in the given sequence such that the lines are printed neatly. Assume that the length of each word is smaller than the line width.

Here is the source code of the Java Program to Implement Word Wrap Problem.The Java program is successfully compiled and run on a Linux system. The program output is also shown below.

public class WordWrapProblem
{
    private static final int INFINITY = Integer.MAX_VALUE;
 
    void solveWordWrap(int l[], int n, int M)
    {
        int extras[][] = new int[n + 1][n + 1];
        int lineCost[][] = new int[n + 1][n + 1];
        int cost[] = new int[n + 1];
        int printSol[] = new int[n + 1];
        int i, j;
 
        for (i = 1; i <= n; i++)
        {
            extras[i][i] = M - l[i - 1];
            for (j = i + 1; j <= n; j++)
            {
                extras[i][j] = extras[i][j - 1] - l[j - 1] - 1;
            }
        }
 
        for (i = 1; i <= n; i++)
        {
            for (j = i; j <= n; j++)
            {
                if (extras[i][j] < 0)
                {
                    lineCost[i][j] = INFINITY;
                } else if (j == n && extras[i][j] >= 0)
                {
                    lineCost[i][j] = 0;
                } else
                    lineCost[i][j] = extras[i][j] * extras[i][j];
            }
        }
        cost[0] = 0;
        for (j = 1; j <= n; j++)
        {
            cost[j] = INFINITY;
            for (i = 1; i <= j; i++)
            {
                if (cost[i - 1] != INFINITY && lineCost[i][j] != INFINITY
                    && (cost[i - 1] + lineCost[i][j] < cost[j]))
                {
                    cost[j] = cost[i - 1] + lineCost[i][j];
                    printSol[j] = i;
                }
            }
        }
        printSolution(printSol, n);
    }
 
    private int printSolution(int p[], int n)
    {
        int k;
        if (p[n] == 1)
        {
            k = 1;
        } else
        {
            k = printSolution(p, p[n] - 1) + 1;
        }
        System.out.println("Line number " + k + " From word no " + p[n] + " to " + n);
        return k;
    }
 
    public static void main(String...arg)
    {
        int l[]  = {3,2,2,5};
        int n = 4;
        int M = 6;
        WordWrapProblem wordWrapProblem = new WordWrapProblem();
        wordWrapProblem.solveWordWrap(l, n, M);
    }	
}
$ javac WordWrapProblem.java
$ java WordWrapProblem
Line number 1 From word no 1 to 1
Line number 2 From word no 2 to 3
Line number 3 From word no 4 to 4

Related posts:

How to Get All Dates Between Two Dates?
Test a REST API with Java
Spring Security OAuth Login with WebFlux
Java Program to Implement Hash Tables with Linear Probing
Java Program to Find Nearest Neighbor Using Linear Search
Finding the Differences Between Two Lists in Java
Java Program to Compute the Volume of a Tetrahedron Using Determinants
Jackson – JsonMappingException (No serializer found for class)
Một số ký tự đặc biệt trong Java
Java Program to Implement ScapeGoat Tree
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Java Program to Implement the Monoalphabetic Cypher
How to use the Spring FactoryBean?
Java Program to Construct a Random Graph by the Method of Random Edge Selection
More Jackson Annotations
Java Program to Implement Weight Balanced Tree
Using a Mutex Object in Java
Composition, Aggregation, and Association in Java
Spring Boot - Creating Docker Image
An Introduction to Java.util.Hashtable Class
Lớp lồng nhau trong java (Java inner class)
Spring Boot Tutorial – Bootstrap a Simple Application
How to Kill a Java Thread
Spring Boot - Flyway Database
Java Program to Construct an Expression Tree for an Prefix Expression
Xây dựng ứng dụng Client-Server với Socket trong Java
Registration – Activate a New Account by Email
Phương thức forEach() trong java 8
Java Program to Check whether Graph is Biconnected
Tips for dealing with HTTP-related problems
Java Program to Implement RoleUnresolvedList API