一首回文歌 —— 茶道
回文
回文指的是把相同的词汇或句子 ,在下文中调换位置或颠倒过来,产生首尾回环的情趣,也叫回环。回文并非是中文独有,但因为汉字可以单独成意,汉语词可以在不改变形态(写法)的情况下同时具备多种语法属性等,使得回文诗成为中华文化中独有的一朵奇葩。
风舞艳花落雪
流 & nbsp; 飞
雾 & nbsp; 芳
香 & nbsp; 树
迷 & nbsp; 幽
月薄霞淡雨红
茶壶回文诗,依次左循环,可得诗 20 首。
- 落雪飞芳树,幽红雨淡霞,薄月迷香雾,流风舞艳花。
- 雪飞芳树幽,红雨淡霞薄,月迷香雾流,风舞艳花落。
- 飞芳树幽红,雨淡霞薄月,迷香雾流风,舞艳花落雪。
- 芳树幽红雨,淡霞薄月迷,香雾流风舞,艳花落雪飞。
- 树幽红雨淡,霞薄月迷香,雾流风舞艳,花落雪飞芳。
- 幽红雨淡霞,薄月迷香雾,流风舞艳花,落雪飞芳树。
- 红雨淡霞薄,月迷香雾流,风舞艳花落,雪飞芳树幽。
- 雨淡霞薄月,迷香雾流风,舞艳花落雪,飞芳树幽红。
- 淡霞薄月迷,香雾流风舞,艳花落雪飞,芳树幽红雨。
- 霞薄月迷香,雾流风舞艳,花落雪飞芳,树幽红雨淡。
- 薄月迷香雾,流风舞艳花,落雪飞芳树,幽红雨淡霞。
- 月迷香雾流,风舞艳花落,雪飞芳树幽,红雨淡霞薄。
- 迷香雾流风,舞艳花落雪,飞芳树幽红,雨淡霞薄月。
- 香雾流风舞,艳花落雪飞,芳树幽红雨,淡霞薄月迷。
- 雾流风舞艳,花落雪飞芳,树幽红雨淡,霞薄月迷香。
- 流风舞艳花,落雪飞芳树,幽红雨淡霞,薄月迷香雾。
- 风舞艳花落,雪飞芳树幽,红雨淡霞薄,月迷香雾流。
- 舞艳花落雪,飞芳树幽红,雨淡霞薄月,迷香雾流风。
- 艳花落雪飞,芳树幽红雨,淡霞薄月迷,香雾流风舞。
- 花落雪飞芳,树幽红雨淡,霞薄月迷香,雾流风舞艳。
当然因为回文的要求,对语法、韵律和意向有诸多限制。因此,回文诗词多为游戏、炫技之作,精品可遇不可求。
茶道
演唱:少司命
作词:凉子
作曲:少司命
编曲 & 后期:灰原穷
这首《茶道》大体比较通顺,有出彩的地方,例如
山晚樵渔 回环 谁遣月岚
岚月遣谁 环回 渔樵晚山
部分也有牵强的感觉。如下方歌词的第二句。
黄昏又舟上 话别
堂辞后驻杖 杖驻后辞堂
别话 上舟又昏黄
当然听歌就曲,总体来说这首歌还是不错的,更多的分析可以看知乎的这篇回答。
检测
根据回文的定义(顺读和倒读一样),可以很快通过编程实现回文字符串或数组的检测。
一个思路是,设计两个指针,分别从头尾像中间前进。比较遇到的字符。若相遇前都相同,则说明回文成立。
1 | int palindrome(char *str, int length) |
当然,根据回文串的定义,其实有更直观的方法,既将所给串(数组)逆置,在和原串比较。这种方法耗费空间较多,但借助一些语言自带的库可以很快实现。
1 | def palindrome(list): |
不过单纯的检测一个串是否回文意义不大。现实问题中,更多的需要是检查一个串中的最大回文子串。这里展示一种时间复杂度为 $O (n)$ 的 Manacher 算法。详细原理会在专门的文章中介绍。
1 | ublic static int getPalindromeLength(String str) { |