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 Hash Tables
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Chuyển đổi giữa các kiểu dữ liệu trong Java
Tính đa hình (Polymorphism) trong Java
Java Program to Create a Random Graph Using Random Edge Generation
Introduction to the Java NIO2 File API
A Guide to Java 9 Modularity
Java Program to Implement Best-First Search
Lập trình đa luồng với CompletableFuture trong Java 8
How to Read a Large File Efficiently with Java
Deploy a Spring Boot WAR into a Tomcat Server
A Guide to LinkedHashMap in Java
Spring Boot - Rest Controller Unit Test
LinkedHashSet trong Java hoạt động như thế nào?
Sort a HashMap in Java
Jackson – Bidirectional Relationships
Working With Maps Using Streams
Create Java Applet to Simulate Any Sorting Technique
Java Program to Implement vector
Jackson – Unmarshall to Collection/Array
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Debugging Reactive Streams in Java
Spring Boot Security Auto-Configuration
Hướng dẫn Java Design Pattern – DAO
Java Program to Implement Singly Linked List
Overflow and Underflow in Java
Intro to the Jackson ObjectMapper
Guide to java.util.concurrent.BlockingQueue
The Modulo Operator in Java
Java Program to Implement LinkedTransferQueue API
Java Program to Check whether Undirected Graph is Connected using DFS
“Stream has already been operated upon or closed” Exception in Java