题解 | #将单词均匀排列#

将单词均匀排列

https://www.nowcoder.com/practice/47cb397f179a46e1ac0f2e388e1f844a

题目考察的知识点是:

字符串的遍历。

题目解答方法的文字分析:

首先,遍历每一行,选取尽可能多的单词放入该行。然后计算在该行中需要添加的空格数,并根据题目要求平均分配空格或者使左侧的空格数多于右侧的空格数。最后将每一行的单词拼接成字符串形式,并添加到结果列表中。。

本题解析所用的编程语言:

c++语言。

完整且正确的编程代码:

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param words string字符串vector
     * @param maxWidth int整型
     * @return string字符串vector
     */
    vector<string> arrangeWords(vector<string>& words, int maxWidth) {
        // write code here
        vector<string> result;
        int i = 0;
        while (i < words.size()) {
            int j = i;
            int curWidth = 0;
            while (j < words.size() && (curWidth + words[j].size() + j - i) <= maxWidth) {
                curWidth += words[j].size();
                ++j;
            }
            int space = maxWidth - curWidth;
            string line = words[i];
            if (j < words.size()) {
                for (int k = i + 1; k < j; ++k) {
                    int numSpaces = (j - k == 1 ||
                                     j == words.size()) ? 1 : (space + j - k - 2) / (j - k - 1);
                    line.append(numSpaces, ' ');
                    space -= (numSpaces - 1);
                    line += words[k];
                }
                if (line.size() < maxWidth) {
                    line.append(maxWidth - line.size(), ' ');
                }
            } else {
                for (int k = i + 1; k < j; ++k) {
                    line.push_back(' ');
                    line += words[k];
                }
                if (line.size() < maxWidth) {
                    line.append(maxWidth - line.size(), ' ');
                }
            }
            result.push_back(line);
            i = j;
        }
        return result;
    }
};

#题解#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务