[Ruby] Ruby BF 算法 Brute Force

本文介绍了一种基于递归思想的暴力解决字符串匹配问题的方法。通过不断迭代比较子串与目标串的字符,实现子串在目标串中的查找,并在不匹配时进行回溯继续搜索,最终确定子串是否存在及起始位置。

判断字符串 STR1 是不是 STR2的子串

暴力解决
主要用到了递归思想

class BruteForce

  STR1 = "ICOME" #模式串
  STR2 = "You Come.ICOME"  #目标串

  LG_1 = STR1.size
  LG_2 = STR2.size

  def recursion s
    if LG_2 < LG_1 || LG_2-s < LG_1
      not_search_exit
    end
    e = s
    0.step(to: LG_1-1) do |x|
      if STR2[e] != STR1[x]
        g = s+1
        (g..LG_2-1).each do |f|
          if STR2[f] == STR1[0]
            recursion f
          elsif LG_2-f < LG_1
            not_search_exit
          end
        end
      end

      if x == LG_1-1
        puts "匹配成功,str1 是 str2 的子串,开始匹配位置:#{s+1}"
        exit
      end
      e += 1
    end
  end
  def not_search_exit
    puts "str1 不是 str2 的子串"
    exit
  end
end

BruteForce.new.recursion(0)

STR1 使子串(模式串), STR2 是主串(目标串)
思想是:
通过重复迭代来判断值是否相等
如果相等继续迭代下去,
如果不相等,则回溯寻找目标串的下一个字符能和子串的第一个字符相等的然后开始迭代,直到完全匹配
算法是不断精简的,不断的减少运行步骤,所以这个在中间加上了一个判断的语句,可以减少很多回溯的步骤,提高了运行效率。但是其实还有可以继续的精简。这个过程中会发现自己的思路越来越清晰,对每个步骤认知更加的清楚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值