LeetCode 68 Text Justification

제목:
많은 단어와 한 줄이 표시할 수 있는 최대 길이를 제시하고 모든 단어를 양쪽으로 정렬하며 마지막 줄은 왼쪽으로 정렬하고 빈칸으로 길이를 보충한다.
아이디어:
한 줄 한 줄의 레이아웃으로 한 줄 한 줄 검사할 때 최대 몇 개의 단어를 넣을 수 있다. 즉, 먼저 단어 사이에 한 개의 빈칸으로만 구분된다고 가정한다.
한 줄에 표시할 단어의 수를 확정한 후 마지막 줄인지 아닌지를 판단한다. 만약 그렇다면 단어 사이를 1개의 빈칸으로 구분하고 마지막으로 줄의 최대 길이까지 빈칸을 보충한다.마지막 줄이 아니라면 단어 뒤에 몇 개의 빈칸을 따라 계산해야 하며 계산 방법은 코드 19와 20줄을 보십시오.
코드:
class Solution {
public:
    vector  fullJustify(vector  &words, int maxWidth) {
        vector  ans;
        for (int i = 0; i < words.size();) {
            int count = words[i].size();
            int num = 1;
            int j = i + 1;
            while (j < words.size()) {
                if (count + words[j].size() + num > maxWidth) {
                    break;
                }
                count += words[j].size();
                ++num;
                ++j;
            }
            stringstream ss;
            if (j != words.size() && num > 1) {
                int space = (maxWidth - count) / (num - 1);
                int last = (maxWidth - count) - (num - 1) * space;
                ss << words[i++];
                while (i < j) {
                    for (int k = 1; k <= space; ++k) {
                        ss << ' ';
                    }
                    if (last) {
                        --last;
                        ss << ' ';
                    }
                    ss << words[i++];
                }
                ans.push_back(ss.str());
            } else {
                ss << words[i++];
                while (i < j) {
                    ss << ' ' << words[i++];
                }
                for (int k = count + num; k <= maxWidth; ++k) {
                    ss << ' ';
                }
                ans.push_back(ss.str());
            }
        }
        return ans;
    }
};

좋은 웹페이지 즐겨찾기