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:
Binary Numbers in Java
Spring MVC Content Negotiation
Java Program to Implement Repeated Squaring Algorithm
Java Program to Implement LinkedList API
A Guide to WatchService in Java NIO2
Adding a Newline Character to a String in Java
Concurrent Test Execution in Spring 5
Java Program to Implement Heap Sort Using Library Functions
Java Program to Perform Searching Using Self-Organizing Lists
Java Program to Perform the Unique Factorization of a Given Number
How to Manually Authenticate User with Spring Security
JUnit 5 @Test Annotation
Create a Custom Auto-Configuration with Spring Boot
Inject Parameters into JUnit Jupiter Unit Tests
Weak References in Java
Java Program to subtract two large numbers using Linked Lists
Java Program to Implement K Way Merge Algorithm
Java Program to Implement vector
Tránh lỗi NullPointerException trong Java như thế nào?
Spring Boot - Servlet Filter
Limiting Query Results with JPA and Spring Data JPA
A Custom Data Binder in Spring MVC
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Đồng bộ hóa các luồng trong Java
Java Program to Implement PriorityQueue API
Changing Annotation Parameters At Runtime
Spring Boot - Google OAuth2 Sign-In
Lớp Collections trong Java (Collections Utility Class)
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Hướng dẫn Java Design Pattern – Command
Java Program to Find the Connected Components of an UnDirected Graph
Java Program to Implement Patricia Trie