fullJustify

来源:互联网 发布:方舟生存进化优化mod 编辑:程序博客网 时间:2024/06/07 23:53
vector<string> fullJustify(vector<string> &words, int L)
{
      vector<string> result;
      if(words.empty() || L < 0)
              return result;
      int i = 0, begin = 0, end = 0;
      int length = 0;
      string formatString;
      while(i < words.size())
      {
              length = 0;
              begin  = i;
              while(i < words.size() && length + words[i].size() <= L)
              {
                      length += words[i].size();
                      //if(i > begin)
                              length += 1; // at least one space;
                      ++i;
              }
              if(begin == i)//words[i].size() >= L
              {
                      result.clear();
                      break;
              }
              end = i - 1;
              int wordCount = end - begin + 1;
              int needSpaceCount = wordCount - 1;// 3 word need 2 space
              int remaindSpace = L - length + wordCount;
              vector<int> space(needSpaceCount, 0);
              if(needSpaceCount == 0)// only one word on one line
              {
                  space.push_back(remaindSpace);
              }
              else
              {
                  for(int i = 0; i < remaindSpace; ++i)
                  {
                      ++space[i % needSpaceCount];
                  }
              }
              formatString.clear();
              int num = 0;
              for(int j = begin; j < i; ++j)
              {
                      formatString.append(words[j]);
                      if(i == words.size() && formatString.size() < L)//last line
                      {
                              formatString.push_back(' ');
                      }
                      else
                      {
                              if(j == begin)
                                  formatString.insert(formatString.end(), space[num++], ' ');
                              else if(j != i - 1)//not last && not first word;
                                  formatString.insert(formatString.end(), space[num++], ' ');
                      }
              }
              if(i == words.size() && L - formatString.size() > 0)//last line, fill ' '
              {
                      formatString.insert(formatString.end(), L - formatString.size(), ' ');
              }
              result.push_back(formatString);
      }
      return result;
}
0 0