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 Gaussian Elimination Algorithm
Summing Numbers with Java Streams
Quick Guide on Loading Initial Data with Spring Boot
Spring Boot - Tracing Micro Service Logs
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
Tìm hiểu về xác thực và phân quyền trong ứng dụng
New Stream Collectors in Java 9
Marker Interface trong Java
Spring Boot: Customize the Jackson ObjectMapper
New Features in Java 14
Mảng (Array) trong Java
Converting String to Stream of chars
Write/Read cookies using HTTP and Read a file from the internet
Quick Guide to the Java StringTokenizer
Thao tác với tập tin và thư mục trong Java
Removing all Nulls from a List in Java
Java Program to Perform Matrix Multiplication
The Thread.join() Method in Java
Giới thiệu Design Patterns
Working with Kotlin and JPA
Hướng dẫn Java Design Pattern – Proxy
Hướng dẫn Java Design Pattern – Builder
Java IO vs NIO
Display Auto-Configuration Report in Spring Boot
Java Program to Check if a Matrix is Invertible
Guava – Join and Split Collections
Reactive WebSockets with Spring 5
Anonymous Classes in Java
Why String is Immutable in Java?
Java Program for Douglas-Peucker Algorithm Implementation
Cachable Static Assets with Spring MVC
Java Program to Implement ConcurrentLinkedQueue API