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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24623403/article/details/77378645

问题:在原字符串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

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页