资源简介

编程实现如下功能: 1、在实验六的基础上,实现串的Brute-Force模式匹配算法。 2、尝试实现串的KMP模式匹配算法。

资源截图

代码片段和文件信息

/**
 * 串的操作实验二:BF算法、KMP算法
 */
package string;
import java.util.Scanner;
/**
 * @author 朱宇婧2017302330020
 * 2018年11月1日 上午9:40:08
 */
public class SeqString{
private char[] strvalue;//字符数组,存放串值
    private int curlen;//当前串的长度

/**
 * 构造方法,以字符串常量构造串对象
 */
    public SeqString(String str) {
        if (str != null) {
            char[] tempchararray = str.toCharArray();
            strvalue = tempchararray;
            curlen = tempchararray.length;
        }
    }
    
    /**
     * 返回字符串长度
     * @return
     */
    public int length() {
        return curlen;    //区别: strvalue.length是数组容量
    }
    
/**
 * 返回字符串中序号为index的字符
 * @param index
 * @return
 */
    public char charAt(int index) {
        if ((index < 0) || (index >= curlen)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return strvalue[index];
    }
    
    /**
     * 实现BF算法
     * @param target
     * @param pattern
     * @return
     */
public static int BF(SeqString target SeqString pattern) {
int index = 0;
int i = 0 j = 0;
char[] array1 = target.strvalue;
char[] array2 = pattern.strvalue;

while(i < array1.length && j < array2.length) {
if(array1[i] == array2[j]) {
i++;
j++;
} else {
index++;
i = index;
j = 0;
}
}

if(j == array2.length) {
return (index+1);//位置要+1
}
return -1;
}

/**
 * KMP算法
 * @param target
 * @param pattren
 * @param next
 * @return
 */
public static int KMP(SeqString target SeqString pattern int[] next){
        for(int i = 0 j = 0; i < target.length(); i++){
            while(j > 0 && target.charAt(i) != pattern.charAt(j)){
                j = next[j

评论

共有 条评论