算法:字符串匹配算法整理

一、定义

字符串模式匹配算法(string searching/matchingalgorithms):就是在一个文本或者较长的一段字符串中,找出一个或多个指定字符串(Pattern),并返回其位置。这类算法属基础算法,各种编程语言都将其包括在自带的String类函数中,而且由之衍生出来的正则表达式也是必须掌握的一种概念和编程技术。

二、常见算法

  1. Brute-Force 算法
  2. KMP 算法
  3. Boyer-Moore 算法
  4. Sunday 算法

2.1、Brute-Force 算法

其思路很简单:从目标字符串初始位置开始,依次分别与Pattern的各个位置的字符比较,如相同,比较下一个位置的字符直至完全匹配;如果不同则跳到目标字符串下一位置继续如此与Pattern比较,直至找到匹配字符串并返回其位置。 我们注意到Brute Force 算法是每次移动一个单位,一个一个单位移动显然太慢,设目标串String的长度为m,Pattern的长度为n,不难得出BF算法的时间复杂度最坏为O(mn),效率很低。 代码也很简单,如下所示(Java)。

/***
     * Brute-Force算法
     *
     * @param source
     * @param pattern
     * @return
     */
    public static int BruteForceMatch(String source, String pattern){
        int index = -1;
        boolean match = true;
        for (int i = 0 , length = source.length() - pattern.length(); i < length; i ++){
            match = true;
            for(int j = 0; j < pattern.length(); j ++){
                if (source.charAt(i + j) != pattern.charAt(j)) {
                    match = false;
                    break;
                }
            }

            if (match) {
                index = i;
                break;
            }
        }
        return index;
    }

参考致谢:
(1)、http://blog.csdn.net/chndata/article/details/43792363

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值