java黑皮书22.3----(模式匹配)
问题描述
提示:这道题就是去实验书上的三种字符串匹配算法:
输入字符串和匹配模式,输出匹配的下标。
难点分析:
提示:这里我建议直接抄书,书上那个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----(模式匹配)相关推荐
- Java黑皮书课后题第1章:1.2(显示五条消息)编写程序,显示以下表格
Java黑皮书第1章课后题:1.2 显示五条消息 题目描述 代码块 修改日志 题目描述 编写程序,显示Welcome to Java五次 和1.1 显示三条消息异曲同工之妙(小声:题目缺陷也一样): ...
- 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 ...
- Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的
Java黑皮书课后题第10章:**10.25(新的字符串split方法) 题目 代码 运行实例 题目 代码 public class Test25 {public static String[] sp ...
- 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 ...
- Java黑皮书课后题第10章:*10.13(几何:MyRectangle2D类)定义MyRectangle2D类
Java黑皮书课后题第10章:10.3 题目 程序 代码 Test13.java Test13_MyRectangle2D.java 运行 UML 题目 程序 Test13.java:测试程序 Tes ...
- Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中
Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中 题目 程序说明 题目槽点 代码:Test2_BMI.java 运行实例 题目 程序说明 Test2_BMI.java ...
- Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))
Java黑皮书课后题第10章:*10.1设计一个名为Time的类.编写一个测试程序,创建两个Time对象 题目 程序 代码 Test1.java Test1_Time.java 运行结果 UML 题目 ...
- Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置。
Java黑皮书课后题第9章:**9.13(Location类)设计一个名为Location的类,定位二维数组中的最大值及其位置 题目 破题 代码 Test13 Test13_Location 运行结果 ...
- Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交。第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4)
Java黑皮书课后题第9章:**9.12(几何:交点)假设两条线段相交.第一条线段的两个端点是(x1, y1)和(x2, y2),第二条线段的两个端点是(x3, y3)和(x4, y4) 题目 破题 ...
最新文章
- 美团分布式服务治理框架OCTO之二:Mesh化
- SessionLocaleResolver
- router-link标签学习
- 【Java】BigDecimal
- linux 挂载u盘考试,Linux 挂载U盘,与解挂
- 微软云计算介绍与实践(实践之一)
- 每日10行代码173:测试下yafu的质因数分解能力
- C语言 汉字名字排列组合
- PPT进行图片的背景去除以及填充新背景,保存图片为PDF
- 前端-JS基础之数据类型
- element的上传如何获取路径_element中文件上传
- Wordpress建站教程:网站SEO优化
- 关于tc作用在入口(ingress)和出口(egress)效果的调研
- three.js网页demo展示
- selenium源码通读·4 |webdriver/common分析
- 幸存者偏差(survivorship bias)
- OpenCV各模块函数使用实例(5)--特征检测(Feature Detection)
- VR全景电子商务增加客户体验
- python写新年快乐程序_python turtle 书写新年快乐
- 艾永亮:上汽通用五菱为什么被称之为神车,它将如何打造超级产品