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:

Java Program to Implement Attribute API
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Implement Bit Array
Java Program to Implement Binomial Heap
Luồng Daemon (Daemon Thread) trong Java
Java Program to Print only Odd Numbered Levels of a Tree
Vòng lặp for, while, do-while trong Java
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Comparing Objects in Java
List Interface trong Java
Java Program to Perform Stooge Sort
Java Program to Apply Above-Below-on Test to Find the Position of a Point with respect to a Line
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Construct an Expression Tree for an Postfix Expression
Send email with SMTPS (eg. Google GMail)
Guide to Java 8 groupingBy Collector
Concrete Class in Java
How to Manually Authenticate User with Spring Security
Pagination and Sorting using Spring Data JPA
Apache Commons Collections SetUtils
Java Program to Implement Extended Euclid Algorithm
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Spring Security Registration – Resend Verification Email
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Spring WebClient Filters
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Versioning a REST API
Fixing 401s with CORS Preflights and Spring Security
Java Program to Implement Pollard Rho Algorithm
Spring WebClient vs. RestTemplate
Java Program to Implement Disjoint Sets
Java Program to find the number of occurrences of a given number using Binary Search approach