zoukankan      html  css  js  c++  java
  • Leetcode#68 Text Justification

    原题地址

    没有复杂的算法,纯粹的模拟题

    先试探,计算出一行能放几个单词

    然后计算出单词之间有几个空格,注意,如果空格总长度无法整除空格数,前面的空格长度通通+1

    最后放单词、放空格,组成一行,加入结果中

    对于最后一行要特殊处理

    代码:

     1 vector<string> fullJustify(vector<string> &words, int L) {
     2   vector<string> text;
     3   int n = words.size();
     4 
     5   int i = 0;
     6   int j = 0;
     7 
     8   while ((i = j) < n) {
     9     int wordsLen = 0;
    10     // 试探
    11     while (j < n && wordsLen + words[j].length() + j - i <= L) {
    12       wordsLen += words[j].length();
    13       j++;
    14     }
    15     // 特殊处理最后一行
    16     if (j == n) {
    17       string line = words[i];
    18       for (int k = i + 1; k < j; k++)
    19         line += " " + words[k];
    20       line += string(L - wordsLen - (j - i - 1), ' ');
    21       text.push_back(line);
    22       break;
    23     }
    24 
    25     if (j == i + 1) // 只有一个单词的行也单独处理,避免除0
    26       text.push_back(words[j - 1] + string(L - words[j - 1].length(), ' '));
    27     else { // 普通情况
    28       int padLen = (L - wordsLen) / (j - i - 1);
    29       int remainNum = L - wordsLen - padLen * (j - i - 1);
    30       string line = words[i];
    31       for (int k = i + 1; k < j; k++) {
    32         string pad(padLen, ' ');
    33         if (remainNum > 0) {
    34           pad += " ";
    35           remainNum--;
    36         }
    37         line += pad + words[k];
    38       }
    39       text.push_back(line);
    40     }
    41   }
    42 
    43   return text;
    44 }
  • 相关阅读:
    mac 使用tree命令
    为什么redis支持lua脚本功能
    redis协议
    Linux的SOCKET编程详解
    大型网站架构之分布式消息队列
    自定义String
    逆转单链表
    单例模式 C++
    构造函数不能为虚函数
    Windows消息机制
  • 原文地址:https://www.cnblogs.com/boring09/p/4243875.html
Copyright © 2011-2022 走看看