美文网首页
暴力子字符串查找算法另一种实现_显示回退

暴力子字符串查找算法另一种实现_显示回退

作者: FiveZM | 来源:发表于2018-03-22 20:31 被阅读0次

算法思路:
指针 i 跟踪txt,这里的i指向的是文本中已经匹配过的字符序列的末端( i + j )
指针 j 跟踪pattern
如果 i 和 j 指向的字符不匹配了,那么需要回退这两个指针的值,
将j重新指向模式的开头0,
将 i 指向本次匹配的开始位置的下一个字符,
因为 i = i + j,所以回退的时候 , i - = j,
因为是从0开始,所以 i 为本次匹配开始位置的下一个字符.

如果 i 和 j指向的字符匹配,那么 j++;
不匹配 则回退 i - = j ; j = 0;
如果j == M就意味着匹配成功,返回第一个匹配字符串的角标,因为i为匹配过的序列的末端,那么第一个匹配字符串的角标则为 i - M, M为pattern的长度
不匹配返回 -1

public class searchForOther {

    public static void main(String[] args) {
        int index = search("ABACADABRAC", "ABRA");
        System.out.println(index);
    }

    private static int search(String txt, String pattern) {
        int N = txt.length();
        int M = pattern.length();
        int i, j = 0;
        for (i = 0; i < N && j < M; i++) {
            if (txt.charAt(i) == pattern.charAt(j))
                j++;
            else {
                i -= j;
                j = 0;
            }
        }
        if(j==M)
            return i-M;
        return -1;
    }

}

相关文章

  • 《算法》笔记 15 - 子字符串查找

    暴力子字符串查找算法隐式回退性能显式回退 Knuth-Morris-Pratt算法确定有限状态自动机DFA的构造性...

  • 暴力子字符串查找算法另一种实现_显示回退

    算法思路:指针 i 跟踪txt,这里的i指向的是文本中已经匹配过的字符序列的末端( i + j )指针 j 跟踪p...

  • 子字符串查找(1)

    一、定义 本文主要介绍子字符串查找的各类常用算法,如朴素匹配算法(暴力查找)、KMP算法、BM算法等。各类匹配算法...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • KMP

    简介 用于子字符串查找 首先是暴力查找 最坏时间复杂度为O(N*M) KMP算法思想 暴力查找之所以慢是因为它每次...

  • KMP字符串匹配算法的实现

    KMP字符串匹配算法的实现 暴力查找 这是最简单的一种字符串匹配算法: 使用一个指针 i 跟踪目标文本 txt, ...

  • iOS-字符串查找

    字符串查找通常有四种方式,暴力查找,KMP查找,BoyerMoore查找以及RabinKarp算法查找,查找最简单...

  • 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。 ...

  • 数据结构与算法 -- 串,BF算法和RK算法

    BF算法 BF(Brute Force)算法,即暴力匹配算法 如果在字符串A中查找字符串B,那么字符串A就是主串,...

  • 数据结构与算法--Boyer-Moore和Rabin-Karp子

    数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找 Boyer-Moore字符串查找算法 ...

网友评论

      本文标题:暴力子字符串查找算法另一种实现_显示回退

      本文链接:https://www.haomeiwen.com/subject/bxjzqftx.html