有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
可以用hash table来做。大致思路如下:
初始化两个hash表,一个是前缀hashtable,一个是后缀hashtable。前缀hashtable的键为字符串的前m个字符,值为字符串最后一个字符。后缀hashtable的键为字符串的后m个字符,值为字符串第一个字符。
线性遍历这n个字符串,将每一个字符串都存入前缀hashtable和后缀hashtable中。
对于后缀hashtable中的每一项(key, value),我们希望知道,以value+key为起始的字符串链的长度是多少。这个长度可以通过不断的查询前缀hashtable来获得。
在得到后缀hashtable中每一项对应的字符串所对应的字符串链的长度后,我们可以找出一个最大的字符串链。