字符串暴力匹配算法(Java)

本文介绍了暴力匹配算法的基本思想及其实现过程。通过示例代码展示了如何进行字符串匹配,并指出了该算法存在的大量回溯问题。此外,还推荐了进一步学习的资源。

首先介绍一下暴力匹配算法的思路
如果用暴力匹配的思路,并假设现在str1匹配到i的位置,字串str2匹配到j的位置,则有:

  1. 如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符。
  2. 如果失配(即str1[i] != str2[j]),令i=i-(j-1),j = 0。相当于每次匹配失败时,i回溯,j被置为0.
  3. 用暴力方法解决问题的话会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。(不可行,接着下一篇会介绍KMP算法)
  4. 暴力匹配算法的实现
package Algorithm;

public class ViolenceMatch {

	public static void main(String[] args) {
		String str1="addgadfhfgsfgs";
		String str2="fhf";
		int index = violenceMatch(str1, str2);
		System.out.println("index="+index);
	}
	//暴力匹配算法实现
	public static int violenceMatch(String str1,String str2){
		char[] s1 = str1.toCharArray();
		char[] s2 = str2.toCharArray();
		
		int s1len = s1.length;
		int s2len = s2.length;
		//两个索引
		int i = 0;//指向字符串str1
		int j = 0;//指向字符串str2
		while (i<s1len && j<s2len) {//保证匹配不越界
			if (s1[i] == s2[j]) {
				i++;
				j++;
			}else {
				i = i-(j-1);
				j=0;
			}
		}
		//判断是否匹配成功
		if (j == s2len) {
			return i-j;
		}else {
			return -1;
		}
	}
}

运行结果如图:
在这里插入图片描述
非常推荐尚硅谷讲解的java算法!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值