字符串的模式匹配
字串的定位操作通常称做模式匹配,是各种串处理系统中最重要的操作之一。本文主要介绍两种常用的实现算法:
1、暴力匹配
2、KMP算法
1.暴力匹配
时间复杂度为O(n*m);n为主串长度,m为模式串长度
算法的基本思想:
从主串的起始位置(或指定位置)开始与模式串的第一个字符比较,若相等,则继续逐个比较后续字符;否则从主串的下一个字符再重新和模式串的字符比较。依次类推,直到模式串成功匹配,返回主串中第一次出现模式串字符的位置,或者模式串匹配不成功,这里约定返回-1;
//伪代码
intbruteForceStringMatch(String source, String pattern)
{
i= 0; j = 0;while(i < slen && j
{if(s[i] ==p[j])++i; ++j;elsei= i - (j -1); //回溯上次匹配起始位置的后一位
j = 0;
}if(j ==plen)return i - j; //匹配成功
else
return -1; //匹配失败
}
实现代码:
1 public static intbruteForceStringMatch(String source, String pattern)2 {3 int slen =source.length();4 int plen =pattern.length();5 char[] s =source.toCharArray();6 char[] p =pattern.toCharArray();7 int i = 0;8 int j = 0;9
10 if(slen
12 else
13 {14 while(i < slen && j
17 {18 ++i;19 ++j;20 }21 else
22 {23 i =