给定n个字符串,询问任意两个字符串的最长公共前缀。每组数据最多100000个字符串,总长最多100000,询问最多100000。
解法一:hash+二分,二分最长公共前缀长度,用hash判定两个前缀是否一致。时间复杂度O(q*log(len))。
/*-------------------FZU 1985 by Temle----------------*/
#include
#include
#include
#include
#include
#include
#include
解法二:使用字典树存取每种字符串,并记录每种字符串对应的字典树中的叶子位置,查询任意两个字符串的最长公共前缀相当于在字典树上跑LCA。
时间复杂度O(q*log(len))。
/*-------------------FZU 1985 by Temle----------------*/
#include
#include
#include
#include
#include
#include
#include
解法三:把所有字符串连接起来,中间用特殊字符分割,跑一遍后缀数组,然后只要计算任意两个后缀rank之间H数组的最小值即为答案。
时间复杂度O(q*log(len))。
/*-------------------FZU 1985 by Temle----------------*/
#include
#include
#include
#include
#include
#include
#include