在一本很老但很有价值的书里读到一个对字符串处理的例子,在此基础上我改编成一个编程问题:
输入一行内容,「暂定只能输入字母组成的单词和空格」,比如“Cold is deleterious to the mayonnaise”「书上的句子lol」,要求经过处理后按单词的首字母顺序输出若干行「行数暂定为字符串除以单词数」,空格由加号代替。这个输出的结果是:
Cold+D
ELETER
IOUS+I
S+MAYO
NNAISE
+THE+T
O+++++
试着在Java上探索了一下,问题可以分解成:获取输入、切词、(单词)排序、分行输出。
其中分行输出涉及的换行问题是最难的,看似简单的换行要解决单词达到末尾、单词需要多行显示、插入空格等子问题。
搜索发现原来这个问题的进一步普遍化——换行问题是一类重要的编程问题,涉及贪婪算法和动态规划等内容。
近期学习的经验之一就是要广度优先,所以我暂且粗略了解一下,等以后基础更好了再细究并落实代码。
感兴趣的朋友可以在「参考」部分进一步了解
参考:
List Processing 「by John Michael Foster 」1967
https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap
https://www.geeksforgeeks.org/word-wrap-problem-dp-19/
https://www.geeksforgeeks.org/word-wrap-problem-space-optimized-solution/