字串(模式串)的定位操作
在主串(也称做目标串)S中,从位置start开始查找是否存在子串(也称做模式串)T,如果在主串S中查找到一个与模式串T相同的子串,则称查找成功;如在主串S中未找到一个与模式串T相同的子串,则称查找失败。当模式匹配成功时,函数返回模式串T的第一个字符在主串S中的位置;当模式匹配失败时,函数返回-1。
朴素的模式匹配算法(Brute-Force算法:BF)BF算法的主要思想是:将主串S的第start个字符和模式T的第1个字符比较,若相等,继续逐个比较后续字符;若不等,从主串S的下一字符起,重新与T第一个字符比较,直到主串S的一个连续子串字符序列与模式T相等。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。否则,匹配失败,返回值 –1。
代码实现:
package String; import java.util.Scanner; public class BF { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String string = sc.nextLine(); String t = sc.nextLine(); int s=BFindex(string, t, 0); if (s!=-1){ System.out.println("匹配成功"); }else { System.out.println("匹配失败"); } } public static int BFindex(String S, String T, int start){ //start为匹配的起始位置 int i = start, j = 0, v; //判断下标不越界 while (i < S.length() && j < T.length()) { //如果相等 if (S.charAt(i) == T.charAt(j)) { i++; j++; } else { //如果不相等,回溯,重新比较,这里的逻辑是i回到的位置 i = i - j + 1; //i的下一个,已经比较了j次,所以是i-j+1 j = 0; } } //判断索引的长度最终是否等于子串的长度 if (j == T.length()) { //匹配成功 v = i - j; } else v = -1; //匹配失败 return v; } }
运行结果:
数据结构:BF算法:串的朴素的简单模式匹配算法(Brute-Force算法)(简单粗暴法)
于 2022-04-11 22:42:38 首次发布
关键词由CSDN通过智能技术生成