cur前缀_前缀树算法实现路由匹配原理解析:Go 实现

路由功能是 web 框架中一个很重要的功能,它将不同的请求转发给不同的函数(handler)处理,很容易能想到,我们可以用一个字典保存它们之间的对应关系,字典的 key 存放 path,value 存放 handler。当一个请求过来后,使用routers.get(path, None) 就可以找到对应的 handler。

利用字典实现路由可以参考我的这篇文章:动手实现 web 框架[1]

使用字典有一个问题,不支持动态路由。如果路由像这样呢?

/hello/:name/profile

name 前面是通配符: ,表示这是个动态的值。一个解决办法是使用前缀树 trie。

前缀树

leetcode 中有这个算法,点这里[2] 查看。

前缀树前缀树,首先是一棵树。不同的是树中一个节点的所有子孙都有相同的前缀。前缀树将单词中的每个字母依次插入树中,插入前首先确认该单词是否存在,不存在才创建新节点,如果一个单词已经全部插入,则将末尾单词设置为标志位。

type Node struct {    isWord bool // 是否是单词结尾    next   map[string]*Node // 子节点}type Trie struct {    root *Node}

以单词 leetcode,leetd 和 code 为例,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值