Text Justification [LeetCode]

Problem Description:http://oj.leetcode.com/problems/text-justification/

Note: Just be careful about boundary when implementing it.

 1 class Solution {

 2 public:

 3     string genNormalLine(vector<string> &words, int L, int start, int end){

 4         int word_count = end - start + 1;

 5         string line;

 6         if(word_count == 1){

 7             line.append(words[start]);

 8             line.append(L-line.size(), ' ');

 9         }else{

10             int slot_num = word_count - 1;

11             int words_size = 0;

12             for(int i = start; i <= end; i++)

13                 words_size += words[i].size();

14             

15             int space_num = L - words_size;

16             int reminder = space_num % slot_num;

17             int quotient = space_num / slot_num;

18             line.append(words[start]);

19             for(int i = start + 1; i <= end; i++) {

20                 if(reminder > 0 ){

21                     line.append(quotient + 1, ' ');

22                     reminder --;

23                 } else {

24                     line.append(quotient, ' ');

25                 }

26                 

27                 line.append(words[i]);

28             }

29         }

30         

31         return line;

32     }

33     

34     vector<string> fullJustify(vector<string> &words, int L) {

35         // Note: The Solution object is instantiated only once and is reused by each test case.

36         vector<string> formatted_lines;

37         if(words.size() == 0)

38             return formatted_lines;

39         for(int i = 0; i < words.size();){

40             int length = 0;

41             

42             int j = i;

43             for(; j < words.size(); j ++){

44                 if( j == i)

45                     length += words[j].size();

46                 else 

47                     length += (1+ words[j].size());

48                 

49                 if(length > L)

50                     break;

51             }

52             

53             //put words in a line

54             if(j == words.size()) {

55                 //last line

56                 string line;

57                 line.append(words[i]);

58                 for(int k = i + 1; k < words.size(); k++){

59                     line.push_back(' ');

60                     line.append(words[k]);

61                 }

62                 if(line.size() < L){

63                     line.append(L-line.size(), ' ');

64                 }

65                 

66                 formatted_lines.push_back(line);

67             }else {

68                 //normal line

69                 formatted_lines.push_back(genNormalLine(words,L, i, j - 1));

70             }

71             

72             //next start index

73             i = j;

74         }

75         

76         return formatted_lines;

77     }

78 };

 

你可能感兴趣的:(LeetCode)