判断字符串 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 是主串(目标串)
思想是:
通过重复迭代来判断值是否相等
如果相等继续迭代下去,
如果不相等,则回溯寻找目标串的下一个字符能和子串的第一个字符相等的然后开始迭代,直到完全匹配
算法是不断精简的,不断的减少运行步骤,所以这个在中间加上了一个判断的语句,可以减少很多回溯的步骤,提高了运行效率。但是其实还有可以继续的精简。这个过程中会发现自己的思路越来越清晰,对每个步骤认知更加的清楚
本文介绍了一种基于递归思想的暴力解决字符串匹配问题的方法。通过不断迭代比较子串与目标串的字符,实现子串在目标串中的查找,并在不匹配时进行回溯继续搜索,最终确定子串是否存在及起始位置。
2389

被折叠的 条评论
为什么被折叠?



