Java实现算法导论中朴素字符串匹配算法
2016-12-02 09:36
471 查看
朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考:
package cn.ansj;
public class NavieStringMatcher {
public static void main(String[] args) {
String T = "欢迎访问fjssharpsword博客,致力于大数据应用解决方案提供!";
String P = "大数据应用解决方案";
NavieStringMatcher nsm = new NavieStringMatcher();
int index = nsm.stringMatcher(T, P);
System.out.println("有效位移是: "+index);
}
/**
* @author fjssharpsword
* @param T 主字符串
* @param P 模式字符串
* @return s 有效位移
*/
public int stringMatcher(String T, String P){
int iTLen = T.length();
int iPLen = P.length();
// 从主串开始比较
for(int i=0; i<iTLen; i++) {
int k = i; // k指向主串下一个位置
for(int j=0; j<iPLen; j++) {
if(T.charAt(k) != P.charAt(j)) {
break;
}else {
k++;// 指向主串下一个位置
if(j == iPLen-1) {
return i;
}
}
}
}
return -1; // 匹配不成功,返回-1
}
}
执行结果:
有效位移是: 23
package cn.ansj;
public class NavieStringMatcher {
public static void main(String[] args) {
String T = "欢迎访问fjssharpsword博客,致力于大数据应用解决方案提供!";
String P = "大数据应用解决方案";
NavieStringMatcher nsm = new NavieStringMatcher();
int index = nsm.stringMatcher(T, P);
System.out.println("有效位移是: "+index);
}
/**
* @author fjssharpsword
* @param T 主字符串
* @param P 模式字符串
* @return s 有效位移
*/
public int stringMatcher(String T, String P){
int iTLen = T.length();
int iPLen = P.length();
// 从主串开始比较
for(int i=0; i<iTLen; i++) {
int k = i; // k指向主串下一个位置
for(int j=0; j<iPLen; j++) {
if(T.charAt(k) != P.charAt(j)) {
break;
}else {
k++;// 指向主串下一个位置
if(j == iPLen-1) {
return i;
}
}
}
}
return -1; // 匹配不成功,返回-1
}
}
执行结果:
有效位移是: 23
相关文章推荐
- Java实现算法导论中KMP字符串匹配算法
- 算法 字符串匹配算法(朴素模式及KMP模式) java实现
- Java实现算法导论中有限自动机字符串匹配算法
- 机器学习入门算法及其java实现-朴素贝叶斯
- Java实现算法导论中线性规划单纯形算法
- 【算法导论-34】红黑树、顺序统计树的Java实现
- Java实现算法导论中Rabin-Karp字符串匹配算法
- Java实现算法导论中最长公共子序列(LCS)动态规划法
- 【算法导论33】跳跃表(Skip list)原理与java实现
- 【算法导论33】跳跃表(Skip list)原理与java实现
- 【算法导论】快速排序java实现
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
- Java实现算法导论中Miller-Rabin随机性素数测试
- Java实现算法导论中快速傅里叶变换FFT迭代算法
- 快速排序quicksort-算法导论java实现
- 算法导论第4章strassen算法JAVA实现
- Java实现算法导论中线性规划单纯形算法
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
- Java实现算法导论中反复平方法模取幂
- 算法导论——26.2 FordFulkerson方法,Edmonds-Karp算法java实现