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 Segment Tree
StringBuilder vs StringBuffer in Java
Most commonly used String methods in Java
Java Program to implement Array Deque
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Get and Post Lists of Objects with RestTemplate
Spring Data JPA @Modifying Annotation
Java Program to Find Transitive Closure of a Graph
Java Program to Check whether Undirected Graph is Connected using DFS
Jackson Annotation Examples
Java Program to Check whether Graph is a Bipartite using DFS
A Quick JUnit vs TestNG Comparison
Using a Mutex Object in Java
Java Program to Implement AA Tree
Spring Security and OpenID Connect
Java Program to Implement Coppersmith Freivald’s Algorithm
Guava Collections Cookbook
Java Program to implement Bi Directional Map
Quick Guide to Spring Controllers
Lấy ngày giờ hiện tại trong Java
Java Program to Create a Balanced Binary Tree of the Incoming Data
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
A Quick Guide to Spring Cloud Consul
Java Program to Compute Determinant of a Matrix
Spring MVC Custom Validation
Java Program to Generate All Possible Combinations of a Given List of Numbers
Introduction to PCollections
Hướng dẫn Java Design Pattern – Chain of Responsibility
Java Program to Implement Stack API
Hướng dẫn Java Design Pattern – Memento
REST Web service: Basic Authentication trong Jersey 2.x
Java Program to find the maximum subarray sum O(n^2) time(naive method)