首页 > 代码库 > 模式匹配——BruteForce

模式匹配——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;
	}
	
}