$Trie$ 树 + 拓扑排序判环.
将所有串插入到一棵 $Trie$ 树中.
若一个字符串 $s_i$ 成为了字典序最小的串,因为这些串互不相同,所以必须要求其他串都不能是 $s_i$ 的前缀.
即在 $Trie$ 树上,根节点到这个串的终止节点路径上不能有其它的串的终止节点.
另一个条件是根到这个节点路径上每条边字符的字典序比它父亲向所有兄弟的边字符的字典序小.
这可以用若干条有向边表示字符间的大小关系,建出图后拓扑排序,若有环,则不合法,否则合法.
时间复杂度 $O(|S|^2\cdot n+|S|\cdot \sum |s|)$ ,其中 $S$ 代表字符集, $s$ 代表读入的串.
1 |
|