字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
来源:互联网 发布:github 建站 打死 编辑:程序博客网 时间:2024/05/16 10:42
普通的字符串匹配:
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);
}
}
}
- 字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
- java实现字符串的一般和KMP模式匹配算法
- KMP算法(字符串匹配算法)详解及java实现
- 字符串匹配的算法(暴力算法和KMP算法)
- 字符串匹配算法(暴力匹配和KMP)
- KMP算法和普通算法字符串匹配差距
- 字符串匹配的KMP算法(二)
- 字符串匹配的KMP算法(转载)
- KMP算法(字符串的匹配)
- 字符串匹配(KMP算法)
- 字符串匹配算法(KMP)
- kmp算法(字符串匹配)
- 字符串匹配(KMP算法)
- KMP算法(字符串匹配)
- 字符串匹配(KMP算法)
- 字符串匹配算法KMP Java实现
- 字符串匹配:KMP算法之JAVA实现
- KMP字符串匹配算法Java实现
- C++编程中如何防止内存溢出问题?
- 黑马程序员_java学习日记num14
- Java提高 - 八大排序方法之直接选择排序
- 大型网站的HTTPS实践(二)-- HTTPS对性能的影响
- Java查漏补缺系列——关于保留位数,四舍五入的方法
- 字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
- 高效程序员的45个习惯之敏捷反馈
- leveldb之cache
- Struts2.3.14分析-初始化1
- Linked List Cycle
- java instanceof关键字
- HDU2594 Simpsons’ Hidden Talents KMP
- 直接插入排序
- 系统调用处理 暨 错误的包装函数