朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是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

Java实现算法导论中朴素字符串匹配算法相关推荐

  1. Java实现算法导论中Rabin-Karp字符串匹配算法

    Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...

  2. Java实现算法导论中有限自动机字符串匹配算法

    这里实现了基于有限自动机(Finite Automaton,FA)的模式匹配算法,算法的重点在于利用字符串的前后缀构造模式P的自动机,具体结合导论中的说明来理解,可参考http://www.geeks ...

  3. Java实现算法导论中KMP字符串匹配算法

    "前缀"和"后缀". "前缀"指除了最后一个字符以外,一个字符串的全部头部组合:"后缀"指除了第一个字符以外,一个字符串 ...

  4. Java实现算法导论中Miller-Rabin随机性素数测试

    Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...

  5. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  6. Java实现算法导论中反复平方法模取幂

    在众多的加密算法中都需要进行幂的取模运算,比如在RSA算法中需要计算d=ne mod N,我们称之为幂模算法,其中: N=p*q(p,q为大素数) n为加密数据,n<N e为公钥,d为私钥,满足 ...

  7. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)

    基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...

  8. Java实现算法导论中快速傅里叶变换FFT递归算法

    要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...

  9. Java实现算法导论中Pollard的rho启发式方法

    Pollard的rho启发式方法用于启发式求解大整数n分解因子,具体要结合导论中来理解,参考代码如下: package cn.ansj;import java.math.BigInteger; imp ...

最新文章

  1. 三十三、分治算法---汉诺塔问题
  2. SpringBoot(十五)_springboot实现预览pdf
  3. python 股票指标库talib_TaLib在股票技术分析中的应用
  4. java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用
  5. Hbase 2.x Region in transition (永久RIT) 异常解决
  6. silk 编解码_Silk编解码在android实现
  7. 06软件构架实践阅读笔记之六
  8. anaconda python_Anaconda下Python环境下载及安装
  9. leetcode第26题:删除排序数组的重复项
  10. linux 测试端口连通性_磨刀不误砍柴工,带你搞定云网络系统性能测试
  11. 目标检测(六)--SPPNet
  12. 洛谷2805 [NOI2009]植物大战僵尸 (拓扑排序+最小割)
  13. 了解SpringMVC框架及基本工作流程
  14. python第三方库pip安装失败,无法使用pip命令安装python第三方库的原因及解决方法...
  15. BOBST工控机触摸屏维修博斯特人机界面维修
  16. php实现微信公众号生成淘宝客推广海报(正则匹配淘宝联盟)
  17. buuoj Pwn writeup 246-250
  18. 网工必须了解的华为华三设备基础命令行与WEB界面
  19. 腾讯音乐MOO音乐应用的Flutter内存治理实战分享
  20. 贪吃蛇小程序·C/C++

热门文章

  1. mysql 存储过程月单拆天单_为部门整理的mysql_db使用军规
  2. python求数列的积_python小游戏学习笔记4-2(列表【】,数列矩阵排列)
  3. LVS的DR工作模型解析
  4. Java学习笔记-包装类
  5. 三相不平衡的原因、危害以及解决措施
  6. WP8.1 Study18:动态磁贴
  7. “谈谈我对技术发展的一点感悟”阅读小记
  8. 李东生:管理者不能变成诸葛先生
  9. python3邮件_python3使用SMTP发送HTML格式邮件
  10. 工具的学习使用(二):快捷键、工具、批处理