字符串搜索算法

目录

二分搜索(适用于有序字符串数组)

Trie树(前缀树)

后缀树与后缀数组


二分搜索(适用于有序字符串数组)

基本概念 二分搜索(Binary Search)是一种高效的查找算法,适用于在有序数组中查找特定元素。与线性搜索相比,二分搜索通过逐步减少搜索范围,大幅提高查找效率。

算法步骤

  1. 确定中间元素:首先计算数组的中间索引mid,并获取该索引处的元素mid_val
  2. 比较目标字符串
    • 如果目标字符串等于mid_val,则查找成功,返回该索引。
    • 如果目标字符串小于mid_val,则在数组的左半部分继续搜索。
    • 如果目标字符串大于mid_val,则在数组的右半部分继续搜索。
  1. 递归或迭代:根据以上步骤不断递归地搜索左半部分或右半部分,直到找到目标字符串或搜索区间缩小到空区间(未找到)。

代码示例

python语言:

def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:p
        mid = left + (right - left) // 2  # 避免溢出

        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return -1  # 未找到

# 示例使用
arr = ["apple", "banana", "cherry", "date", "fig", "grape"]
target = "date"
result = binary_search(arr, target)
if result != -1:
    print(f"字符串'{target}'在索引 {result} 处找到。")
else:
    print(f"字符串'{target}'未找到。")

C语言:

#include <stdio.h>
#include <string.h>

// 二分查找函数
int binarySearch(char *arr[], char *target, int left, int right) {
    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (strcmp(arr[mid], target) == 0) {
            return mid;
        } else if (strcmp(arr[mid], target) < 0) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    return -1;
}

// 测试示例
int main() {
    char *ar
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值