题意:
给出一个字符串,求出现次数超过1的子串的出现个数。
字符串长度<=3000;
题解:
题目问的是子串的个数。那么首先我们要找到全部的子串。
而字符串的全部后缀的前缀能够不重不漏的表示全部子串;
那么假设将全部的后缀增加trie树。每一个经过的结点——也就是这个后缀的前缀——计数+1。
然后题目要求按字典序输出。利用一下trie树性质搞好就完了。
指针版trie好慢啊。
。。
代码:
#include<stdio.h> #include<string.h> #include<algorithm> #define N 3100 using namespace std; struct trie { int cnt; trie *next[2]; trie() { next[0]=next[1]=NULL; cnt=0; } }*root=new trie(); char str[N]; void insert(char *s) { bool index; trie *p=root; while(*s!='