问题描述

提示:这道题就是去实验书上的三种字符串匹配算法:

输入字符串和匹配模式,输出匹配的下标。


难点分析:

提示:这里我建议直接抄书,书上那个KMP真的太好了,真的优雅

public static int match(String text, String pattern) {int[] fail = getFilure(pattern);int i = 0;int k = 0;while (i < text.length()) {if (text.charAt(i) == pattern.charAt(k)) {if (k == pattern.length() - 1) {return i - pattern.length() + 1;}i++;k++;} else {if (k > 0) {k = fail[k - 1];} else {i++;}}}return -1;}public static int[] getFilure(String pattern) {int[] fail = new int[pattern.length()];int i = 1;int k = 0;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(k)) {i++;k++;} else if (k > 0) {k = fail[k - 1];} else {i++;}}return fail;}
}

代码:

public class Lab22_3 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.print("Enter a string: ");String a = in.nextLine();System.out.print("Enter a string: ");String b = in.nextLine();int index = match(a, b);if (index >= 0) {System.out.println("match at index " + index);} elseSystem.out.println("unmatched");}public static int match(String text, String pattern) {int[] fail = getFilure(pattern);int i = 0;int k = 0;while (i < text.length()) {if (text.charAt(i) == pattern.charAt(k)) {if (k == pattern.length() - 1) {return i - pattern.length() + 1;}i++;k++;} else {if (k > 0) {k = fail[k - 1];} else {i++;}}}return -1;}public static int[] getFilure(String pattern) {int[] fail = new int[pattern.length()];int i = 1;int k = 0;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(k)) {i++;k++;} else if (k > 0) {k = fail[k - 1];} else {i++;}}return fail;}
}

java黑皮书22.3----(模式匹配)相关推荐

  1. Java黑皮书课后题第1章:1.2(显示五条消息)编写程序,显示以下表格

    Java黑皮书第1章课后题:1.2 显示五条消息 题目描述 代码块 修改日志 题目描述 编写程序,显示Welcome to Java五次 和1.1 显示三条消息异曲同工之妙(小声:题目缺陷也一样): ...

  2. Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

    Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类) 题目 缺陷 UML图 代码 Test02_MyDate.java:用于参考的My ...

  3. Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的

    Java黑皮书课后题第10章:**10.25(新的字符串split方法) 题目 代码 运行实例 题目 代码 public class Test25 {public static String[] sp ...

  4. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  5. Java黑皮书课后题第10章:*10.13(几何:MyRectangle2D类)定义MyRectangle2D类

    Java黑皮书课后题第10章:10.3 题目 程序 代码 Test13.java Test13_MyRectangle2D.java 运行 UML 题目 程序 Test13.java:测试程序 Tes ...

  6. Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中

    Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中 题目 程序说明 题目槽点 代码:Test2_BMI.java 运行实例 题目 程序说明 Test2_BMI.java ...

  7. Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))

    Java黑皮书课后题第10章:*10.1设计一个名为Time的类.编写一个测试程序,创建两个Time对象 题目 程序 代码 Test1.java Test1_Time.java 运行结果 UML 题目 ...

  8. Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置。

    Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置 题目 破题 代码 Test13 Test13_Location 运行结果 ...

  9. Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)

    Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...

最新文章

  1. 美团分布式服务治理框架OCTO之二:Mesh化
  2. SessionLocaleResolver
  3. router-link标签学习
  4. 【Java】BigDecimal
  5. linux 挂载u盘考试,Linux 挂载U盘,与解挂
  6. 微软云计算介绍与实践(实践之一)
  7. 每日10行代码173:测试下yafu的质因数分解能力
  8. C语言 汉字名字排列组合
  9. PPT进行图片的背景去除以及填充新背景,保存图片为PDF
  10. 前端-JS基础之数据类型
  11. element的上传如何获取路径_element中文件上传
  12. Wordpress建站教程:网站SEO优化
  13. 关于tc作用在入口(ingress)和出口(egress)效果的调研
  14. three.js网页demo展示
  15. selenium源码通读·4 |webdriver/common分析
  16. 幸存者偏差(survivorship bias)
  17. OpenCV各模块函数使用实例(5)--特征检测(Feature Detection)
  18. VR全景电子商务增加客户体验
  19. python写新年快乐程序_python turtle 书写新年快乐
  20. 艾永亮:上汽通用五菱为什么被称之为神车,它将如何打造超级产品

热门文章

  1. java/php/net/python音乐爱好者论坛设计
  2. 谷歌地图模型自动下载
  3. 将淘宝数据包导入到自己的商城系统
  4. 用c++做双人枪战游戏
  5. 从SNMP到WBEM--论网络和系统管理的发展和展望(SNMP篇)
  6. BUCK降压电路自动计算表格
  7. 高德地图APP用户体验报告
  8. 风之丘 魔女宅急便插曲
  9. Flink中迟到数据的处理
  10. 七夕来袭~表白方式大礼包