【KMP算法和暴力求解法】字符串匹配

算法的精妙不在于代码,而在于思想

暴力求解法

从字符串 str1中匹配,子字符串 str2

  • 如果当前字符匹配成功, 即 str1[i]==str2[j], 则 i++; j++; 继续匹配下一个字符
  • 如果当前字符匹配失败, 则 i=i-(j-1); j=0; 也就是每次匹配失败时, i回溯, j被置为0

图解:
在这里插入图片描述

  • 1、我们比较i指针指向的字符和j指针指向的字符是否一致。如果一致就都向后移动,如果不一致,如下图:
    在这里插入图片描述
    *2、 A和E不相等,那就把i指针移回第1位(假设下标从0开始),j移动到模式串的第0位,然后又重新开始这个步骤:
    在这里插入图片描述
    代码:
/**
 * 暴力破解法
 * @param ts 主串
 * @param ps 模式串
 * @return 如果找到,返回在主串中第一个字符出现的下标,否则为-1
 */

public static int bf(String ts, String ps) {
   
   
    char[] t = ts.toCharArray();
    char[] p = ps.toCharArray();
    int i = 0; // 主串的位置
    int j = 0; // 模式串的位置
    while (i < t.length && j < p.length) {
   
   
       if (t[i] == p[j]) {
   
    // 当两个字符相同,就比较下一个
           i++;
           j++;
       } else {
   
   
           i = i 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值