Advertisement
lifeiteng

68. Text Justification

Jan 9th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.82 KB | None | 0 0
  1. class Solution {
  2.     public List<String> fullJustify(String[] words, int maxWidth) {
  3.         List<List<String>> col = new ArrayList<>();
  4.         int len = 0;
  5.         List<String> list = new ArrayList<>(), re = new ArrayList<>();
  6.         for(String w : words)
  7.         {
  8.             if(len + w.length() <= maxWidth)
  9.             {
  10.                 list.add(w);
  11.                 len += w.length() + 1;
  12.             }
  13.             else
  14.             {
  15.                 col.add(list);
  16.                 list = new ArrayList<>();
  17.                 list.add(w);
  18.                 len = w.length() + 1;
  19.             }
  20.         }
  21.         col.add(list);
  22.         int size = col.size();
  23.         for(int i = 0; i  < size - 1; i++) re.add(f1(col.get(i), maxWidth));
  24.         re.add(f2(col.get(size - 1), maxWidth));
  25.         return re;
  26.     }
  27.    
  28.     String f1(List<String> list, int w)
  29.     {
  30.         int size = list.size(), wordLen = 0;
  31.         if(size == 1) return f2(list, w);
  32.         for(String word : list) wordLen += word.length();
  33.         w -= wordLen;
  34.         int numSpaces = size - 1,
  35.             restSpaces = w / numSpaces,
  36.             remain = w % numSpaces;
  37.         String perSpace = "";
  38.         while(restSpaces-- > 0) perSpace += " ";
  39.         StringBuilder sb = new StringBuilder();
  40.         sb.append(list.get(0));
  41.         for(int i = 1; i < size; i++)
  42.         {
  43.             sb.append(perSpace);
  44.             if(remain > 0)
  45.             {
  46.                 remain--;
  47.                 sb.append(" ");
  48.             }
  49.             sb.append(list.get(i));
  50.         }
  51.         return sb.toString();
  52.     }
  53.    
  54.     String f2(List<String> list, int w)
  55.     {
  56.         StringBuilder sb = new StringBuilder();
  57.         sb.append(String.join(" ", list));
  58.         while(sb.length() < w) sb.append(" ");
  59.         return sb.toString();
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement