字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
2015-05-04 21:09
856 查看
普通的字符串匹配:
public static int ViolentMatch(String str, String seed){int i = 0;
int j = 0;
char[] strtochars = str.toCharArray();
char[] seedtochars = seed.toCharArray();
while (i < str.length() && j < seed.length())
{
if (strtochars[i] == seedtochars[j])
{
//①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++
i++;
j++;
}
else
{
//②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0
i = i - j + 1;
j = 0;
}
}
//匹配成功,返回模式串p在文本串s中的位置,否则返回-1
if (j == seed.length())
return i - j;
else
return -1;
}
KMP算法实现的字符串匹配:
public static int KmpSearch(String s, String p){
int i = 0;
int j = 0;
char[] strtochars = s.toCharArray();
char[] seedtochars = p.toCharArray();
while (i < s.length() && j < p.length())
{
//①如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++
if (j == -1 || strtochars[i] == seedtochars[j])
{
i++;
j++;
}
else
{
//②如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]
//next[j]即为j所对应的next值
j = next.get(j);
}
}
if (j == p.length())
return i - j;
else
return -1;
}
得到next数组:
public static void GetNext(String p)
{
next.add(-1);
int k = -1;
int j = 0;
char[] ps = p.toCharArray();
while (j < p.length() - 1)
{
//p[k]表示前缀,p[j]表示后缀
if (k == -1 || ps[j] == ps[k])
{
++k;
++j;
next.add(k);
}
else
{
k = next.get(k);
}
}
}
得到nextvel数组:
public static void GetNextval(String p)
{
next.add(-1);
int k = -1;
int j = 0;
char[] ps = p.toCharArray();
while (j < p.length() - 1)
{
//p[k]表示前缀,p[j]表示后缀
if (k == -1 || ps[j] == ps[k])
{
++j;
++k;
//较之前next数组求法,改动在下面4行
if (ps[j] != ps[k])
next.add(k); //之前只有这一行
else
//因为不能出现p[j] = p[ next[j ]],所以当出现时需要继续递归,k = next[k] = next[next[k]]
next.set(j, next.get(k));
}
else
{
k = next.get(k);
}
}
}
相关文章推荐
- 字符串匹配之KMP算法思路、原理与Java实现
- 字符匹配KMP算法 java实现
- 字符串匹配之KMP算法思路、原理与Java实现
- 算法 字符串匹配之朴素算法和KMP算法及JAVA代码实现
- 字符串匹配——KMP算法的Java实现
- mysql REGEXP 正则的实现两个字符串组的匹配(实现数据库字符串匹配查询)
- 多模字符串匹配算法原理及Java实现代码
- 字符串匹配sunday算法java实现
- 字符串匹配问题——KMP算法实现
- 用KMP算法实现字符串匹配
- Leetcode28. kmp算法实现字符串匹配
- 字符串匹配(一)——从暴力匹配到KMP算法
- 字符串匹配的kmp算法 及 python实现
- 字符串匹配算法——Sunday算法和KMP算法(java版本)
- kmp算法实现的字符串匹配
- java通过堆栈实现字符串匹配
- Java中使用正则表达式实现字符串匹配
- 字符串匹配的KMP算法实现
- Java中使用正则表达式实现字符串匹配
- Java中使用正则表达式实现字符串匹配