数据结构与算法_字符串匹配

问题:在原字符串source中查找子串target,如果存在,则返回子串target的首字母在source中的索引

<思路>使用两层for循环,外层变量 i 遍历source的每一个字符,内层循环遍历target字符,比较source中从 i 开始到 (i+target)个字符是否逐一匹配,有一个字符不匹配则跳出内层循环,外层循环变量+1

<代码>

public int doSearch(String source,String target){
		int max = source.length() - target.length();
		for(int i = 0;i<=max;i++){
			int matchCount = 0;
			
			for(;matchCount < target.length() 
					&&(source.charAt(i+matchCount) == target.charAt(matchCount));matchCount++);			
			
			if(matchCount == target.length())
				return i;			
		}
		return -1;
	}

代码中有几点注意:

1.max变量:

答:max表示source中需要比较的最长的字符串长度,如果过了这个长度,剩下的长度都比target的长度小,根本不可能匹配。【注意外层循环用的是小于等于max不是小于


2.matchCount变量为什么不放在内层循环里面:

答:matchCount变量的作有两个,一个是target与source的子串比较的时候遍历target注意比较,二是作为匹配成功与否的判断依据,如果matchCount小于target的长度,就说明是中间有不一样的字符,提前跳出来了,如果相等,就说明全部匹配成功。


3.内层循环为什么还要有matchCount小于target.length这个判断条件:

因为在内层循环里面实质上也是一个遍历字符串数组的过程,所以就需要对用来索引的变量设置上限,不能超过target的长度,否则会越界


4.为什么最后的判断是matchCount等于target.length(),而不是target长度减去1:

匹配失败提前跳出来就不说了,如果是匹配成功,内层循环结束的条件是matchCount不满足小于target.length ,也就是说,在完成target最后一个字符的比较后(这个时候matchCount是等于target.length-1的),matchCount++让其不满足循环条件跳出循环,这才到了if的判断,所以不用减1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值