初级编程通关练习题 #5 – 文本对齐

给定一个字符串和一个单行长度N(20 < N < 80),按照下面的规则来把字符串做自动换行和文本对齐。

  • 每一行的头尾都需要是以单词开始和结束,也就是头尾对齐。
  • 单词之间使用空格来分隔。
  • 在不切割单词的情况下,每一行需要容纳尽可能多的单词。
  • 每一行使用换行符 ‘\n’ 来表示该行结束,该换行符不算入每一行的长度。
  • 单词之间的空格数量差异不能大于1,也就是空格需要尽量平均分配。
  • 空格多的分隔需要放在前面,少的放在后面。譬如:”a—b—c–d–e\n“,’-‘表示空格。
  • 最后一行不需要调整空格的数量,每个单词之间只需要一个空格。同时也不需要换行符’\n’。
  • 如果单行是一个单词则不需要空格。

下面的图案是一段文字按照每行30个字符来进行文本对齐后的结果:

Text Alignment

输入样例:

data = 'ABC EFG HI J', width = 8

输出样例:

‘ABC EFG\nHI J’

算法思路:

  • 方法一:使用递归算法,每次通过搜索空格来取单行最大数字符串来进行排版,一直到最后一行。
  • 方法二:使用for循环,每次也是取一行来做排版。单行排版时需要计算空格如何均匀分配,可以采用字符串函数 replace 来进行。