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