今天主要是研究后缀数组——处理字符串的有力工具这个论文来理解题目,并看了几题,首先是SPOJ 694Distinct Substrings这道题给定一个字符串,求不相同子串个数。每个子串一定是某个后缀的前缀,问题就等价于求所有后缀之间的不相同子串个数。然后依次处理每个后缀。每个后缀会贡献n-1-sa[i]-height[i]个新的前缀子串。SPOJ 705 New DistinctSubstrings 然后这道题与上题也类似。URAL 1297 Palindrome这道题题意是给你一个字符串,要你求出这个串中的最长回文字串,如果存在多个,则输出第一次出现的那个。操作起来比较麻烦,把原串的反串加个原串后面,中间加个没有出现过的字符,然后在原串中,下标i在反串中对应的位置为2*l-i 如果求以i为对称轴的回文串,我们求suffix(i)和suffix(2*l-i)的LCP 如果求以i和i+1为对称轴的回文串,我们求suffix(i+1)和suffix(2*l-i)的LCP,表示代码还没看明白但思路好像就是这个思路。