强迫症整理圣手的字典序试炼
故事开始前,先认识一下阿整
我的室友阿整,人送外号**“整齐哥”**,一个把“对称”二字刻进DNA的男人。
- 他的书架,书必须从左到右高度严格递增,而且同一高度必须成对出现。如果某本绝版书只剩孤本,他会在对面放一面镜子,说“虚像也是对称,你不要瞧不起虚像”。
- 他的衣柜,袜子必须按颜色谱系排列,左边是暖色,右边是冷色,正中间那只纯白袜子是“色温对称轴”。
- 连吃薯条,他都得先数一遍,奇数根绝不动嘴。“奇数是宇宙的奇点。”他严肃地嚼着偶数根薯条,像在修bug。
所以,当那天他收到一封神秘信件,打开看到纸上写着 “babab” 时,我感觉他整个人都不好了。
一、来信
信封是用火漆封的,盖着一个太极图印章。信纸泛黄,上面只有五个字母:babab
阿整捏着信纸,眉头拧成麻花:“这谁写的?b居然排在a前面?!”
我:“这不是回文嘛?babab 正反读都是 babab,这么对称你还挑刺?”
“回文只是最低要求!”阿整拍案而起,“真正的大成境界,是字典序最小的回文排列!这就像书架,同高度的书不但要成对,还要按书名首字母升序排列,不能因为《阿Q正传》和《战争与和平》一样厚就随便乱放!乱放是对文明的亵渎!”
他拿起红笔,在 babab 上画了个叉,写下了他的目标:重排出字典序最小的回文
我看了一眼,顿时感觉这是一道算法题。而阿整,就是一个行走的贪心算法。
二、阿整的镜像整理大法
阿整深吸一口气,双手平举至胸前,掌心缓缓下压——这是他每次干大事之前的“气场归位仪式”,据说能让体内紊乱的对称粒子重新对齐。
然后他掏出那本牛皮封面、四角包了金属护角、书脊上用游标卡尺量过才贴上去的标签写着**“整齐宪法”**的笔记本。翻到用红丝带标记的那一页,上面赫然是“回文归位·三大法则”。
法则 1:一刀两断·镜像分离
“凡回文者,左右互镜像也。”
他的手指在babab上缓缓划过:“长度五,半之得二。前两个字符——b和a,即为左半月。右半月不过是左半月的水中倒影,何必再数一遍?重复统计,是对强迫症的侮辱。”
他掏出一把裁纸刀,刀锋对准信纸上ba和bab的交界处,悬停了三秒钟——不多不少,刚好三秒。他说这叫“切割前的对称冥想”。刀落纸分,他捏起左半边,把右半边扔进垃圾桶:“垃圾信息已清除。”
他把写着ba的纸条贴在白板正中央,退后两步,歪了歪头。然后走上前,把纸条往左挪了半毫米。
“刚才贴歪了。”
法则 2:字典顺序·点名归位
“左半月虽得,然内中秩序未立。”
他盯着b和a,眼珠子左右横跳,像一台扫描仪在对焦。“b在前,a在后?荒唐!字典序是文明世界的基石,翻开世间任何一本词典,a字头必列于b字头之前!”
“左半ba里,b有1个,a有1个。” 他拿起笔,在便签上划拉:“现在,按字母表顺序点名——从a走到z,a有一个,写一个a;b有一个,接着写一个b。剩下二十四个字母没有,跳过。结果:ab。”
他把便签贴在白板上,横平竖直地量了四边边距,误差不超过 0.3 毫米。然后回身敲下代码,键盘声极度均匀:
def smallestPalindrome(s: str) -> str:
n = len(s)
cnt = Counter(s[:n//2]) # 镜像分离:只统计左半月
half = []
for c in ascii_lowercase: # 从 a 到 z,挨个点名,有几就抄几
half.append(c * cnt[c])
敲完他点头,然后眉头一皱,把最后一行删掉重打。因为上一版括号和字母之间的空格数不对称。
“空格也是字符,对称要从像素级抓起。”
法则 3:定海神针·镜像合体
“现在,处理整个回文宇宙的奇点。”
阿整的目光落在原字符串s[2]上——那个正中间的b。
“奇数长度,必有一子立于对称轴之上。它不属于左,不属于右。它就是镜子本身,是回文世界的原点。我称其为——”他顿了顿,把声音压得极低,“定海神针。”
mid = [s[n//2]] if n % 2 else [] # 有奇点则封神,无则虚空
敲完他立刻按下 Ctrl+S,力道之大像是给宇宙存档。
“最后一步,镜像合体。”
他站起身,瞳孔里的高光都变成了等号:“右半月不需要重新计算。它就是左半月在水中的倒影——ab翻过来即是ba,直接镜像。强迫症的至高效率,不是干两遍活,而是干一遍,让对称定律帮你复制出另一半。事半,功倍,绝对对称。”
return ''.join(half + mid + half[::-1])
回车键落下,屏幕上跳出 abbba。阿整长长呼出一口气,把键盘推进抽屉,抽屉合上的缝隙和桌面完美齐平。
“世界,”他闭上眼睛,“重新归于秩序了。”
三、修罗场预告
就在他准备把信纸裱进相框、供在书架正中央时(当然,先用水平仪校准了三遍)时,我忍不住多嘴:“等等,万一信上写的是abaaba这种全偶数字符串呢?没有落单仔,中间岂不是空的?你那定海神针不得当场失业?”
阿整的嘴角浮现一丝“我早算到了”的弧度:“无奇点,则中宫虚位以待。”
他双手交叉抱于胸前,左右手指在手臂上各敲了四下,节拍严格对称:“空虚也是一种完美,如同数字0——它看似什么都没有,却撑起了整个数学大厦。定海神针不一定是实体,它也可以是虚空本身。”
他顿了顿,把视线投向窗外:“真正的强迫症,不是执着于填满一切,而是能容忍一个完美的空。”
说完他自己被感动到了,沉默了三秒以示致敬,接着优雅地翻过信纸,准备装裱——
然后整个人像被石化了一样。
信纸背面,竟然还有字。
不是普通的字。每一个字母都是标准衬线体,笔画粗细均匀到像是激光刻出来的。行间距、字间距、页边距——每一项都经过了精密计算,肉眼找不到一微米的偏差。
阿整的瞳孔骤缩。他引以为傲的“肉眼测距”,此刻竟然挑不出任何毛病。
纸上写道:
“不错。你找到了第 1 小的回文排列。” “现在——找第 k 小。”
下方画着一个太极图。不是手绘的,是用圆规和曲线板画出来的,阴阳鱼的眼睛是完美的正圆,半径目测是外圆半径的八分之一。落款一行小字,字体大小刚好是正文的 0.618 倍:
“下一次,你会收到 k。找不到,你的薯条将永远是奇数根。” —— 整齐神教·高阶试炼部
阿整手里的马克笔“啪嗒”掉在地上,滚成了一个完美的圆。但他没心思欣赏——他死死盯着信纸上那个用圆规画出来的太极图,嘴唇在颤抖。
“我以为自己已经是强迫症的顶点……没想到,我只是整理字符串,有人却想整理我。”

本作品采用
知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议
进行许可。