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:

REST Web service: HTTP Status Code và xử lý ngoại lệ RESTful web service với Jersey 2.x
Java Program to Check if a Matrix is Invertible
Spring Boot Integration Testing with Embedded MongoDB
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Sắp xếp trong Java 8
Setting a Request Timeout for a Spring REST API
File Upload with Spring MVC
Validate email address exists or not by Java Code
Understanding Memory Leaks in Java
Java Program to Implement K Way Merge Algorithm
Servlet 3 Async Support with Spring MVC and Spring Security
Java Program to Find Hamiltonian Cycle in an UnWeighted Graph
Java Program to Implement Counting Sort
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Java Program to Find Minimum Element in an Array using Linear Search
Spring Boot - Securing Web Applications
Java Program to Generate Date Between Given Range
Connect through a Proxy
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Hướng dẫn sử dụng lớp Console trong java
How to Store Duplicate Keys in a Map in Java?
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Getting Started with Stream Processing with Spring Cloud Data Flow
Java Program to Implement Sparse Array
Spring Security Form Login
Spring Boot Security Auto-Configuration
OAuth 2.0 Resource Server With Spring Security 5
Date Time trong Java 8
Spring Boot Actuator
Java Program to Find the Minimum Element of a Rotated Sorted Array using Binary Search approach
Java Program to Find the Shortest Path Between Two Vertices Using Dijkstra’s Algorithm
Converting Between an Array and a Set in Java