字符串bf匹配算法java实现


/**
 * bf字符串寻找算法
 * 算法思想,使用子串对主串进行挨个匹配,如果匹配不正确,则主串向后加1,继续匹配
 * 将待匹配的主串和子串做成字符数组,方便匹配使用
 */
public class BfSearch {
    /**
     * 使用bf算法,在主串t中取匹配子串p
     * @param t 主串
     * @param p 子串
     * @return
     */
    public int bf(String t,String p){
        /**
         * 违法的寻找,直接返回-1
         * 判定方式:主串长度为0,主串为空,子串长度为0,子串为空或者子串长度大于主串长度,都为非法的查找,
         * 直接返回
         */
        if (t == null|| t.length() == 0  || p == null || p.length() ==0 || t.length() < p.length()){
            return -1;
        }
        // 将字符串转成字符数组
        char[] t_array = t.toCharArray();// 主串字符数组
        char[] p_array = p.toCharArray();// 子串字符数组

        // 匹配过程
        return match(t_array,p_array);
    }

    /**
     * 字符串匹配过程
     * @param t
     * @param p
     * @return
     */
    private int match(char[] t,char[] p){
        int i = 0; // 设置主串检索下标位置
        int j = 0; // 设置子串检索下标位置
        int position = 0; // 保留检索后的开始位置
        while (i<t.length && j< p.length){
            if (t[i] == p[j]){
                // 主串位置与子串匹配成功,主串与子串下标均+1;
                i++;
                j++;
            } else {
                // 匹配失败
                i = i - j +1; // 主串索引为当前索引减去子串的索引再+1,是为了实现主串索引在不匹配情况下,向后移动一位的目的
                j = 0; // 子串检索,从0开始
            }
        }
        // 返回匹配到的索引位置
        if (i <= t.length){
            position = i - p.length;
        } else {
            position = -1;
        }
        return position;
    }

    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
        BfSearch bf = new BfSearch();
        int bf1 = bf.bf("abcd", "cd");
        System.out.println(bf1);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值