zoukankan      html  css  js  c++  java
  • LeetCode Text Justification

     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <string>
     4 #include <vector>
     5 
     6 using namespace std;
     7 
     8 class Solution {
     9 public:
    10     vector<string> fullJustify(vector<string> &words, int L) {
    11         int len = words.size();
    12         vector<string> res;
    13         if (L < 1) {
    14             res.push_back(string(""));
    15             return res;
    16         }
    17         int pos = 0;
    18 
    19         while (pos < len) {
    20             int pre_pos = pos;
    21             int llen = words[pos++].size();
    22 
    23             while (pos < len) {
    24                 if (llen + 1 + words[pos].length() > L) {
    25                     break;
    26                 }
    27                 llen = llen + 1 + words[pos++].length();
    28             }
    29             bool last_line = pos >= len;
    30             
    31             int wcnt = pos - pre_pos;       // number of words in one line
    32             int wlen = llen - (wcnt - 1);   // length of words in one line
    33             int space= L - wlen;            // space in one line
    34 
    35             string line;
    36             bool left_justify = last_line || wcnt == 1;
    37 
    38             // avg space if space can be distributed evenly, it should be a integer
    39             // or it will be a float and rounded to a integer
    40             int avg_space = 0;
    41             
    42             // when the avg space has been rounded, ext_space indicates the lost spaces
    43             int ext_space = 0;
    44             
    45             // be sure that zero divide will not happend
    46             // last line do not need avg_space and ext_space
    47             if (!left_justify) {
    48                 avg_space = space / (wcnt - 1);
    49                 ext_space = space - avg_space * (wcnt - 1);
    50             }
    51             // start to build a line
    52             line = words[pre_pos];
    53 
    54             for (int i=1; i<wcnt; i++) {
    55                 if (left_justify) {
    56                     line.push_back(' ');
    57                 } else {
    58                     line.append(string((ext_space-- > 0 ? 1 : 0) + avg_space, ' '));
    59                 }
    60                 line.append(words[pre_pos + i]);
    61             }
    62             if (line.size() < L) {
    63                 line.append(string(L - line.size(), ' '));
    64             }
    65             res.push_back(line);
    66         }
    67         
    68         return res;
    69     }
    70 };
    71 
    72 
    73 void print(vector<string>& s) {
    74     for (int i=0; i<s.size(); i++) {
    75         cout<<s[i]<<"|"<<endl;
    76     }
    77 }
    78 int main() {
    79     Solution s;
    80     const char* w[] = {"Listen","to","many,","speak","to","a","few."};
    81     vector<string> words(w, w + sizeof(w) / sizeof(const char*));
    82     words.push_back(string(""));
    83 
    84     vector<string> res = s.fullJustify(words, 6);
    85 
    86     print(res);
    87     system("pause");
    88     return 0;
    89 }

    关键是明确需求

  • 相关阅读:
    EELS
    企业管理软件随想透视>包容,无形思想>有形方便
    定风波
    企业管理软件随想也谈企业框架软件需求
    Delphi数据库开发-前言
    游戏引发的……
    js 当前时间
    代码片段
    阶段总结
    Web界面设计
  • 原文地址:https://www.cnblogs.com/lailailai/p/3985549.html
Copyright © 2011-2022 走看看