我先把题目放出来以便有人看到解析,没有看到问题。
给定一组个字符串,为每个字符串找出能够唯一识别该字符串的最小前缀。
输入描述:
第一行输入一个整数 n 表示字符串个数
后面n行,每行一个字符串,一共n串互不相同的字符串。(2 <= n <= 100,字符串长度不超过100)
输出描述:
输出 n 行,每行一个字符,每个字符为之前输入的最小可识别前缀
输入样例1:
5 meituanapp meituanwaimai dianpingliren dianpingjiehun mt
输出样例1:
meituana meituanw dianpingl dianpingj mt
析题:
这个是经典的字典树的题目,Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。
实现原理:
利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。
下面的两组代码一中是直接利用char 来对其解析,另一组是利用ASCLL码来对其进行解析,相对来说在数据量级不大的情况下两者的效率应该是几乎相等。在数据量的大的情况下具体效果反应是什么样子的,请大家测试之后可以反馈我。
这里他的博客提供更详细的结题思路我就不再说了:Trie树的C++实现
感谢这位大哥。
第一组代码:
//前缀树
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
String[] strArr = new String[n];