模式匹配——BruteForce

模式匹配

基本原理
 在编辑文本程序的过程中,经常需要在文本中找到某个模式的所有出现位置,典型情况是,一段正在被编辑的文本构成一个文件,而所要搜索的模式是用户正在输入的特定关键字,有效地解决这个问题的算法叫做字符串匹配模式。

形式化描述
 假设文本是一个长度为n的数组T【1....n】,而模式是一个长度为m的数组P【1...m】,其中m<n,进一步假设P和T的元素都是来自一个有限字母集的字符,那么如果
0《s 《n-m  并且t【s+1...s+m】=p【1...m】 那么称模式P在文本T中出现,且偏移为s

package jxau.blueDot.lyx;

/**
 *@liyixiang
 *@2014-8-16
 *@TODO:
 *	模式匹配之朴素算法
 */
public class BruteForce {

	/**
	 * @param1:subString 
	 * 		主串T 长度为n
	 * @param2:childString
	 * 		子串P 长度为m
	 * @return
	 * 		返回偏移量s
	 */

	/**
	 * 
	 * 1.字串的第一字符与主串的第一个字符比较,若不匹配字串的第一个字符和主串的第
	 * 二个字符比较  
     * 2.若字串的第一个字符与主串的某一位置上字符串匹配,则将字串的第二个字符与主
     * 串该位的下一位置进行比较,依次类推。遇到不相等,则重复第一步。  
	 */
	public int stringMatching(String subStr,String childStr){

		int index = -1;   			//返回结果 若有则返回偏移量 若无返回-1
 		boolean match = true;

		//从0到最大可偏移量 也就是主串长度n-子串长度m
		for(int i=0;i<subStr.length()-childStr.length();i++){
			match = true;

			for(int j=0;j<childStr.length();j++){
				//如果没有匹配到结果
				if(subStr.charAt(i+j) != childStr.charAt(j)){
					match = false;
				}
			}
			//匹配成功
			if(match){
				index = i;
				break;
			}
		}

		return index;
	}

}

模式匹配——BruteForce,布布扣,bubuko.com

时间: 2024-10-25 01:47:04

模式匹配——BruteForce的相关文章

字符串的模式匹配——Brute-Force算法和KMP算法

子串的定位操作是要在主串S中找出一个与子串T相同的子串,通常把主串S称为目标,把子串T称为模式把从目标S中查找模式为T的子串的过程称为“模式匹配”. 1.Brute-Force算法的设计思想 Brute-Force是普通的模式匹配算法.将主串S的第1个字符和模式T的第1个字符比较,若相等,继续逐个比较后续字符:若不等,从主串的下一字符起,重新与模式的第一个字符比较,直到主串的一个连续子串字符序列与模式相等 ,返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功:否则,匹配失败,返回值 0.

[转]模式匹配之Brute-Force、KMP

(Brute-Force)  一.与串相关的概念 1.串(或字符串)是由零个或多个字符组成的有限序列.一般记作:s="c0c1c2…cn-1"(n≥0).零个字符的串称为空串,通常以两个相邻的双引号来表示空串,仅由空格组成的的串称为空格串,如:s="    ": 2.串与线性表的异同.字符串一般简称为串,可以将它看作是一种特殊的线性表,这种线性表的数据元素的类型总是字符型的,字符串的数据对象约束为字符集.在线性表的基本操作中,大多以“单个元素”作为操作对象,而在串中

串的模式匹配

在串的各种操作中,串的模式匹配是经常用到的一个算法.串的模式匹配也称为子串的定位操作,即查找子串在主串中出现的位置. 1.经典的模式匹配算法Brute-Force. 2.KMP算法. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 60 typedef struct { char ch[MAXSIZE]; int length; }SeqString; #include

Java数据结构之字符串模式匹配算法---Brute-Force算法

模式匹配 在字符串匹配问题中,我们期待察看源串 " S串 " 中是否含有目标串 " 串T " (也叫模式串).其中 串S被称为主串,串T被称为子串. 1.如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置. 2.如果在主串中未找到子串,则称为模式匹配失败,返回-1. 在模式匹配过程中有两个比较经典的算法:Brute-Force与KMP算法是两种最经典的模式匹配算法. 在本片中主要分析BF算法,很黄很暴力.下面是简单的思路解析:  

模式匹配- 朴素模式匹配算法

■朴素的模式匹配算法(Brute-Force,BF算法,蛮力算法)-换下一个,从头再来. 模式匹配的最原始想法,从目标串T的的第一个字符开始与模式串P的第一个字符开始进行比较,如果相等,则继续对后续的字符进行比较,否则目标串T从第二个字符开始与模式串P的第一个字符重新比较,直至模式串P中的每个字符依次和目标串T中的一个子串相等为止,此时称为匹配成功,否则匹配失败. 如果模式串P的长度是m,目标串T的长度是n,假设最坏的情况是每遍比较都在最后出现不等,即每遍最多比较m次,最多比较n-m+1遍,总的

字符串 模式匹配

要点 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配. 假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题.P称为模式,T称为目标.如果T中存在一个或多个模式为P的子串,就给出该子串在T中的位置,称为匹配成功:否则匹配失败. 文中代码是本人自己写的,实测有效,含JAVA和C++两种代码.干货充足吧. 蛮力算法 (BF算法) 蛮力算法(Brute-Force),简称BF算法.(男朋

模式匹配-BF、KMP、JavaString.indexOf、BM大比拼

闲来无事,比比看. /** * 模式匹配-BF.KMP.JavaString.indexOf.BM大比拼 */ package javay.test; import javay.util.PMBF; import javay.util.PMBM; import javay.util.PMKMP; /** * 模式匹配-BF.KMP.JavaString.indexOf.BM大比拼 * @author DBJ */ public class TestPM { /** * @param args *

字符串的模式匹配中的算法

字符串的模式匹配是一个比较经典的问题:假设有一个字符串S,称其为主串,然后还有一个字符串T,称其为子串. 现在要做的是,从主串S当中查找子串T的位置,如果存在返回位置值,如果不存在返回-1.另外主串又称为目标串, 子串称为模式串. 暴力匹配算法 这是一个经典的串匹配问题,涉及的算法也比较多,先讨论第一种简单的暴力算法,思路如下 将主串S的第pos个字符 与 子串T的第一个字符比较, 若相同,继续比较子串和主串后面的字符. 若不相同,那么从主串S的第(pos + 1)个字符开始继续向后匹配,直到匹

LeetCode:Word Pattern - 字符串模式匹配

1.题目名称 Word Pattern(字符串模式匹配) 2.题目地址 https://leetcode.com/problems/word-pattern/ 3.题目内容 英文:Given a pattern and a string str, find if str follows the same pattern. 中文:给出一组模式(pattern)和一个字符串(str),查看字符串是否与模式匹配 例如: pattern = "abba",str = "dog cat