前缀树:前缀树如何存储和查找单词?实例讲解
前缀树(字典树)是处理字符串前缀问题的数据结构,核心是利用公共前缀节省空间、提升查找效率。其节点含字符、最多26个子节点(假设小写字母)及isEnd标记(是否为单词结尾)。 插入时从根节点开始,逐个字符处理,无对应子节点则新建,处理完字符后标记结尾节点isEnd为true。查找时同样从根开始逐个字符匹配,最后检查isEnd确认是否存在。 实例中,“app”与“apple”共享前缀“app”,“banana”与“bat”共享“ba”,体现空间优势。其优势在于空间更省(共享前缀)、查找快(时间复杂度O(n),n为单词长度),且支持前缀查询。
阅读全文栈与队列的应用:括号匹配问题,用栈解决超简单
### 括号匹配问题:栈的"超简单"应用 文章介绍了利用栈(后进先出特性)解决括号匹配问题的方法。括号匹配需判断由`()`、`[]`、`{}`组成的字符串是否合法,即左括号与右括号一一对应且顺序正确。 栈的"后进先出"特性适合此类问题:左括号入栈暂存,右括号需匹配最近入栈的左括号。具体步骤为:初始化栈,遍历字符串时,左括号直接压栈;右括号则检查栈顶元素是否匹配(通过字典映射右括号与对应左括号),匹配则弹出栈顶,否则非法;遍历结束后栈为空则合法,否则非法。 关键细节包括:区分括号类型(用字典映射)、右括号空栈时直接非法、最终栈为空是合法的必要条件。通过左压右查、匹配弹栈的逻辑,可高效判断任意括号串合法性。
阅读全文二叉搜索树:如何用二叉搜索树实现高效查找?
二叉搜索树(BST)是一种高效的数据结构,用于解决日常数据查找中“快速定位目标”的问题。它是特殊二叉树,每个节点满足:左子树所有节点值小于当前节点值,右子树所有节点值大于当前节点值。 其高效性源于“左小右大”规则:查找时从根节点开始,每次比较目标值与当前节点值,若小于则递归左子树,大于则递归右子树,可排除一半节点,效率稳定在O(log n),优于无序数组(O(n))和有序数组二分查找(插入效率低)。 查找过程核心是“比较-缩小范围”:从根节点出发,等于则找到,小于去左子树,大于去右子树,递归执行。递归或迭代均可实现,如递归法从根开始逐层比较,迭代法则用循环缩小范围。 需注意,若BST不平衡(如退化为链表),效率会退化为O(n);平衡树(如红黑树、AVL树)可保持稳定O(log n)。BST通过“导航式”缩小范围,实现高效有序查找。
阅读全文