实现office word中的两端对齐功能。

只有个单词时,右边补齐空格。最后一行每个词间一个空格,整下的空格右边补齐。给定字符串,和每行的字符数L。进行两端对齐输出。

我的思路是写一个函数,给定相应的参数就返回该行的string。然后在主函数里只要负责给参数就好了。参数包括words字符串数组本身,然后每个字符串的长度数组。开始start记录从字符串数组只的那个词开始,end记录到哪个词结束。L就是每行的最大字符数。在子函数里实现如果是最后一个单词了,那么就每个词空一个空格。其余后面补齐。在主函数里通过记录start到目前的长度是否等于或者超过L来判断start和end。如果end超过了长度就结束,返回结果即可。代码有点复杂。将近100行。调了9次bug终究AC了。

  1. class Solution {
  2. public:
  3. // 给定相应的参数,返回该行字符串满足右对齐
  4. string fun68(vector<string> &words, int len[], int start, int end, int L)
  5. {
  6. if(start == end)
  7. {
  8. string subans = words[start];
  9. for (int i = ; i < L - len[start]; ++i)
  10. subans += ' ';
  11. return subans;
  12. }
  13. string ans = "";
  14. int tolen = , inter = ; // 词的长度tolen,两个词之间的空格inter
  15. for (int i = start; i <= end; i++)
  16. {
  17. tolen += len[i];
  18. }
  19. int left = L - tolen;
  20. inter = left / (end - start);
  21. int times = left - inter * (end - start);//剩times个空格需要在前times个词间加一个空格
  22. if(end == words.size() -) // 如果是最后一个了,那么每个单词空一格单词,剩下的空格放在最后边
  23. {
  24. for (int i = start; i < words.size() - ; i++)
  25. {
  26. ans += words[i] + ' ';
  27. }
  28. ans += words[end];
  29. left -= (end - start);
  30. for (int i = ; i < left; i++)
  31. ans += ' ';
  32. }
  33. else // 否则就是平均分空格
  34. {
  35. for (int i = start; i <start + times; ++i)
  36. {
  37. ans += words[i];
  38. for (int j = ; j < inter + ; ++j)
  39. {
  40. ans += " ";
  41. }
  42. }
  43. for (int i = start + times; i < end; ++i) // 多出来的不能平均分的空格从左边开始分
  44. {
  45. ans += words[i];
  46. for (int j = ; j < inter; ++j)
  47. {
  48. ans += " ";
  49. }
  50. }
  51. ans += words[end];
  52. }
  53. return ans;
  54. }
  55. //主函数
  56. vector<string> fullJustify(vector<string> &words, int L)
  57. {
  58. vector<string> ans;
  59. if (words.size() == )
  60. {
  61. return ans;
  62. }
  63. int n = words.size();
  64. int *len = new int[n];
  65. for (int i = ; i < n; ++i)
  66. {
  67. len[i] = words[i].size();
  68. }
  69. int sum1 = len[], sum2 = , start = , end = ; // sum1记录从start开始的词到end的包括空格的长度
  70. string tmp = "";
  71. while ()
  72. {
  73. if (sum1 == L || sum1 + == L) // 如果有满足刚好等于L,那么就是要输出一行了
  74. {
  75. ans.push_back(fun68(words, len, start, end, L));
  76. start = end + ;
  77. end = end + ;
  78. if(end < n)// 没输出一行要相应的该sum的值,相当于重新计算过
  79. {
  80. sum1 = len[end];
  81. sum2 = ;
  82. continue;
  83. }
  84. else
  85. break;
  86. }
  87. else if (end + < n)
  88. sum2 = sum1 + + len[end + ];
  89. else
  90. {
  91. ans.push_back(fun68(words, len, start, end, L));
  92. break;
  93. }
  94.  
  95. if (sum1 < L && sum2 > L) // 说明到end应结束一行
  96. {
  97. ans.push_back(fun68(words, len, start, end, L));
  98. start = end + ;
  99. end = start;
  100. sum1 = len[end];
  101. sum2 = ;
  102. continue;
  103. }
  104. sum1 += + len[end + ];
  105. end++;
  106. }
  107. return ans;
  108. }
  109. };

原创,但不是最好的。有时间了再学习学习50行的。

Text Justification 实现两端对齐功能的更多相关文章

  1. [LeetCode] Text Justification 文本左右对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  2. Text Justification 文本左右对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  3. 实现css两端对齐

    如何实现css的两端对齐功能? 最近做项目遇到这种情况,如图所示: input左边框的用户,旧密码,新密码,确认密码无法对齐,样式很丑. 解决办法: 找到对应的类名,加上:text-align:jus ...

  4. 68. Text Justification一行单词 两端对齐

    [抄题]: Given an array of words and a width maxWidth, format the text such that each line has exactly  ...

  5. [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克

    这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤: 动态规划求解的五个"简单&q ...

  6. [Swift]LeetCode68. 文本左右对齐 | Text Justification

    Given an array of words and a width maxWidth, format the text such that each line has exactly maxWid ...

  7. Text Justification,文本对齐

    问题描述:把一个集合的单词按照每行L个字符放,每行要两端对齐,如果空格不能均匀分布在所有间隔中,那么左边的空格要多于右边的空格,最后一行靠左对齐. words: ["This", ...

  8. [Leetcode] text justification 文本对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  9. [LeetCode] 68. Text Justification 文本对齐

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

随机推荐

  1. QR代码简单

    QR代码(Quick Response Code, 高速响应码)属于二维矩阵码在一个.由DENSO(日本电装)公司开发,由JIS和ISO将其标准化. QR码分为两种模式:模式1.模式2.当中.模式1相 ...

  2. 使用log4j日志-配置载入问题

    1.在eclipse中,把log4j.properties放在类路径下,在项目启动时就会自己主动载入. 2.在idea中.把log4j.properties放在类路径下,可是项目启动时不能直接载入(原 ...

  3. 怎么样Ubuntu正在使用root账号登录

    一个. 因为当你需要 root 权限,使用 sudo 我们将能够做到这一点.假设你真的需要在 Ubuntu 启用 root 帐户的话,这是最好的运行下面的操作: 1.再次设置 root 的passwo ...

  4. 使用eclips发展java当闪回的问题

    近期開始android的开发学习.当然要先从java入手了.我选择eclips作为开发的IDE,在測试java代码例子时,假设我的代码是能够出现系统自己主动代码补齐时eclips就会立马闪退. 刚開始 ...

  5. JavaEE(9) - Session EJB的生命周期、事务及拦截器

    1. SessionBean的生命周期 无状态Session Bean: 不存在状态-->待命状态-->被销毁状态 不存在状态-->待命状态: 1)通过构造器创建EJB实例 2)执行 ...

  6. 设计模式——依赖倒置原则实例(PHP实现)

    <?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...

  7. Elasticsearch教程

    Elasticsearch教程 摘要: 参考资料Elasticsearch中文参考文档思维导图阅读全文 posted @ 2015-08-05 11:49 xingoo 阅读(18) | 评论 (0) ...

  8. Lenovo E46A-Win 7_无线灯亮但无法启动(耽误3天以上您信吗.....)问题: wlan autoconfig 依赖服务或组无法启动

    Lenovo E46A-Win 7_无线灯亮但无法启动(耽误3天以上您信吗.....)问题: wlan autoconfig 依赖服务或组无法启动 提示: windows7 无线连接服务wlan au ...

  9. 网络资源(4) - extJS视频

    2014_08_24 http://v.youku.com/v_show/id_XMjk2ODc0MjA4.html?f=7183617 extJS视频教程04——ExtJS框架入门

  10. hdu Lowest Bit

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1196 大水题   lowbit   的应用    (可以取出一个数二进制中的最后一个1.树状数组常用, ...