LeetCode 前缀和后缀搜索(前缀树)

描述:

给定多个 words,words[i] 的权重为 i 。

设计一个类 WordFilter 实现函数WordFilter.f(String prefix, String suffix)。这个函数将返回具有前缀 prefix 和后缀suffix 的词的最大权重。如果没有这样的词,返回 -1。

示例:
输入:
WordFilter(["apple"])
WordFilter.f("a", "e") // 返回 0
WordFilter.f("b", "") // 返回 -1
注意:
words的长度在[1, 15000]之间。
对于每个测试用例,最多会有words.length次对WordFilter.f的调用。
words[i]的长度在[1, 10]之间。
prefix, suffix的长度在[0, 10]之前。
words[i]和prefix, suffix只包含小写字母。
思路分析:

这种单词的搜索,一般都是使用前缀树来处理,即通过前缀树的结构来来储存所有的单词集合,在搜索单词时减少重复搜索的目的。关于前缀树及其运用请翻阅 前缀树实现以及运用

第一步:建树。将vector<string>& words转换为前缀树
第二步:首先判断前缀prefix是否存在
第三步:在以prefixRoot为起始的子树中,搜索单词的后缀为suffix的最大权值
//前缀树的程序表示
class TrieNode {
   
public:
	bool isWord;//当前节点为结尾是否是单词
	int weight = 0;//只用当isWord == true,权重才有意义
	vector<TrieNode*> children;
	TrieNode() : isWord(false), children(26, nullptr), weight(0) {
   }
	~TrieNode() {
   
		for (TrieNode* child : children)
			if (child) delete child;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值