最小唯一前缀 --经典字典树问题(美团点评2020校招系统开发方向笔试题)

我先把题目放出来以便有人看到解析,没有看到问题。

给定一组个字符串,为每个字符串找出能够唯一识别该字符串的最小前缀。

输入描述:

第一行输入一个整数 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];
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值