码迷,mamicode.com
首页 > 编程语言 > 详细

算法导论——朴素字符串匹配算法

时间:2015-07-13 12:28:20      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

package org.loda.string;

import org.junit.Assert;

/**
 * 
 * @ClassName: NaiveStringMatcher
 * @Description: 朴素字符串查找
 * 
 *               text:abcabaabcabac 
 *               pattern:abaa
 * 
 * @author minjun
 * @date 2015年7月7日 下午4:02:14
 * 
 */
public class NaiveStringMatcher {

	public static void main(String[] args) throws Exception {
		// 原始文本
		String text = "abcabaabcabac";
		// 查找的模式
		String pattern = "abaa";

		// 模式在文本中第一次出现的位置
		int index = indexOf(text, pattern);

		System.out.println(index);

	}

	private static int indexOf(String text, String pattern) {
		Assert.assertNotNull(text);
		Assert.assertNotNull(pattern);
		int tLen = text.length();
		int pLen = pattern.length();
		if (tLen < pLen)
			return -1;

		//每次都往右边偏移一位来比较text和pattern
		for (int i = 0; i < tLen - pLen + 1; i++) {
			int j;
			//最多进行pLen轮比较
			for (j = 0; j < pLen; j++) {
				//如果发现不相等的马上停止比较
				if (text.charAt(i + j) != pattern.charAt(j)) {
					break;
				}
			}
			//比较完成之后,如果比较了pLen次,说明执行了完整的比较并且找到了pattern的位置i
			if (j == pLen) {
				return i;
			}
		}

		//如果还是没有找到pattern的位置,说明在text不存在pattern
		return -1;
	}
}



算法导论——朴素字符串匹配算法

标签:

原文地址:http://my.oschina.net/u/1378920/blog/477751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!