作者:禅与计算机程序设计艺术
1.背景介绍
回文串(Palindrome)是一个关于单词、数字、符号等书写顺序而言的字符串,正向阅读和反向阅读都一样的单词或句子就是回文串。例如:"racecar", "level","noon"等都是回文串。回文串的一个重要应用场景在于用来检查、验证用户输入是否正确。比如当用户注册时,要求输入一个包含数字、字母或者特殊字符的密码,如果用户输入了不合法的密码,则需要提示用户重新输入;另一种应用场景是在搜索引擎中检索关键字。搜索引擎会对用户查询的关键字进行分词,然后将其倒序排列形成一个新的字符串,然后进行比较。如果新生成的字符串与原始查询字符串相同,那么这个查询字符串就是一个回文字符串。对于一些比较复杂的任务来说,比如寻找两个字符串中的最长公共子序列(Longest Common Subsequence),也有着巨大的价值。这些任务通常用动态规划来解决。本文主要讨论如何有效地检测一个给定的字符串是否是回文字符串的问题。
2.核心概念与联系
回文串算法包括三个基本概念:正向扫描、逆向扫描以及中心扩展。正向扫描:从左向右读取字符串,通过判断当前位置和下一个位置是否匹配来进行扫描,直到扫描完成。逆向扫描:从右向左读取字符串,同样通过判断当前位置和上一个位置是否匹配来进行扫描,直到扫描完成。中心扩展:当某个字符与相邻的字符匹配且扫描方向是左右的情况,可以认为此时的扫描范围可以扩大,称为中心扩展。