算法笔记_009:字符串匹配【蛮力法】

1 问题描述

给定一个n个字符组成的串(称为文本),一个m(m <= n)的串(称为模式),从文本中寻找匹配模式的子串。


2 解决方案

2.1 具体编码

package com.liuzhen.chapterThree;

public class BruteForceStringMatch {
    //根据文本串N,和模式串M,返回第一个匹配模式串的子串在N中的位置
    public static int getStringMatch(int[] N , int[] M){
        int n = N.length;          //文本串的长度
        int m = M.length;          //模式串的长度
        for(int i = 0;i < n-m;i++){       //最后一轮子串匹配的起始位置是n-m,如果大于n-m一定不会出现匹配子串
            int j = 0;
            while(j < m && M[j] == N[i+j])
                j = j +1;
            if(j == m)
                return i;
        }
        return -1;
    }

    public static void main(String args[]){
        int[] N  = {1,2,3,2,4,5,6,7,8,9};
        int[] M = {6,7,8};
        int position = getStringMatch(N,M);
        System.out.println("文本串N中第"+position+"位开始,可以寻找一个匹配模式M的子串,该位置字符值为:"+N[position]);
    }
}

2.2 运行结果

文本串N中第6位开始,可以寻找一个匹配模式M的子串,该位置字符值为:6
时间: 2024-10-13 07:36:22

算法笔记_009:字符串匹配【蛮力法】的相关文章

算法系列笔记9(字符串匹配)

字符串匹配指有一个文本串S和一个模式串P,现在要查找P在S中的位置. 主要有以下算法: 其中朴素算法和KMP算法我们在这边bloghttp://blog.csdn.net/lu597203933/article/details/41124815中已经讲解过.RP算法时间复杂度较高,我也没看,想看可以看算法导论.这里主要讲解有限自动机的字符串匹配算法. 有限自动机的定义: 有限自动机字符串匹配主要是构建一个状态转移函数.&(q,a)表示状态q<其中状态q表示已经匹配成功q个字符了>接收字

算法题之字符串匹配问题

我最近复习一道困难程度的算法题,发现了许多有趣之处.在借鉴了他人解法后,发现从最简单的情况反推到原题是一种解锁新进阶的感觉.从递归到动态规划,思维上一步一步递进,如同一部跌宕起伏的小说,记录下来和诸君共赏之. 题目如下: 给你一个字符串?s?和一个字符规律?p,请你来实现一个支持 '.'?和?'*'?的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖?整个?字符串?s的,而不是部分字符串. 说明: s?可能为空,且只包含从?a-z?的小写字母

数据结构与算法之美-字符串匹配(上)

BF (Brute Force) 暴力/朴素匹配算法 主串和模式串 我们在字符串 A 中查找字符串 B,那字符串 A 就是主串,字符串 B 就是模式串. 我们把主串的长度记作 n,模式串的长度记作 m.因为我们是在主串中查找模式串,所以 n>m. BF算法思想 在主串中,检查起始位置分别是 0.1.2-n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的. BF算法的缺点 在极端情况下,如主串是"aaaaa-aaaaaa",模式串是"aaaaab&quo

算法模板——KMP字符串匹配

功能:输入一个原串,再输入N个待匹配串,在待匹配串中找出全部原串的起始位置 原理:KMP算法,其实这个东西已经包含了AC自动机的思想(fail指针/数组),只不过适用于单模板匹配,不过值得一提的是在单模板大量匹配待匹配串时,这个会有相当大的优势,AC自动机虽然好想一些,但是在这一类问题上的性价比就略低了 1 var 2 i,j,k,l,m,n:longint; 3 a:array[0..100000] of longint; 4 s1,s2:ansistring; 5 begin 6 readl

【算法】字符串匹配之Z算法

在很长一段时间,求文本与单模式串匹配,我只用KMP.后来我在CF上看到Z算法,用的人也不少.在学习之后,我感觉Z算法也是很精妙的.在以前的博文中也有过用Z算法来解决字符串匹配的题目. 下面介绍一下Z算法. 先一句话讲清楚Z算法能求什么东西. 输入为一个字符串s,Z算法可以求出这个字符串每一个后缀与自身的最长公共前缀LCP. 接下来,介绍Z算法的具体内容. 记字符串s的长度为n. Z算法需要维护一对值,记为left和right,简记为L和R.L和R满足s[L,R]为s串的前缀.当i为1的时候,暴力

字符串匹配与KMP算法笔记

>>字符串匹配问题 字符串匹配问题即在匹配串中寻找模式串是否出现, 首先想到的是使用暴力破解,也就是Brute Force(BF或蛮力搜索) 算法,将匹配串和模式串左对齐,然后从左向右一个一个进行比较, 如果不成功则模式串向右移动一个单位,直到匹配成功或者到达匹配串最后仍然不成功,返回失败. 很明显,这种算法有很多的地方可以优化,假设要搜索的串为S,长度为n,要匹配的串为M,长度为m,时间复杂度为O(nm). >>KMP算法 Knuth-Morris-Pratt算法以三个发明者命名

字符串匹配问题 ---- 算法导论读书笔记

字符串匹配是一个很常见的问题,可以扩展为模式的识别,解决字符串问题的思想被广泛地应用.介绍四种解决该问题的办法,包括:最朴素的遍历法,Rabin-Karp算法,自动机机匹配,Knuth-Morris-Pratt算法即耳熟能详的KMP. 在一开始,先对时间复杂度做出一个总扩(从大到小):[1]朴素法:O( (n-m+1)m ):[2]Rabin-Karp:预处理:O(m),匹配:最坏O( (n-m+1)m ),但是平均和实际中比这个好得多:[3]自动机:预处理O(m|Σ|),匹配O(n):[4]K

字符串匹配-KMP算法学习笔记

参考文章: 1.字符串匹配的KMP算法 2.KMP算法详解 3.从头到尾彻底理解KMP 版权声明:本文为博主原创文章,未经博主允许不得转载.

字符串匹配的KMP算法

html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 16px 20px; } h1, h2, h