串的模式匹配(一)

串的模式匹配(一),第1张

串的模式匹配

子串的定位 *** 作通常称为串的模式匹配,目的是求解子串(模式串)在主串中的位置。

第一次匹配:
            *
	i=1		c d a b c d		
	j=1		a b c 
	        ^
第二次匹配:
			  *
	i=2		c d a b c d		
	j=1		  a b c 
			  ^
第三次匹配:
				*
	i=3		c d a b c d		
	j=1		    a b c 
				^
第四次匹配:
				  *
	i=4		c d a b c d		
	j=2		    a b c 
				  ^			
第五次匹配:
				  	*
	i=5		c d a b c d		
	j=3		    a b c 
				 	^	
			
//字符串的暴力匹配算法。
	static int Index(char S[], char T[]){
		int i=1,j=1;
		while(i<S.length && j<T.length){
			if(S[i] == T[j]){
				i++;j++;	
			}else{
				i=i-j+2;j=1;
			}
		}
		if(j>=T.length) {
			return i-T.length;
		}else
			return 0;
	}

下面算法主要运用Java String的常用方法进行递归求解,点击查看Java String的常用方法

//字符串的暴力匹配算法——递归匹配。
	static int Index1(String S, String T) {
		int i=1;
		while(i<S.length()-T.length()+1) {
			String sub =S.substring(i, T.length()+i);//字符串截取
			if(T.compareTo(sub)!=0) //字符串比较
				i++;
			else
				return i;
		}
		return 0;
	}

如下是字符串匹配的函数具体调用。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String S = "cdabcd";
		String T = "abc";
		//字符串的暴力匹配
		int id = Index(S.toCharArray(),T.toCharArray());
		//递归匹配
		//int id = Index1(S, T);
		if(id == 0) {
			System.out.print("匹配失败!");
		}else {
			System.out.print("匹配成功!字符串T在字符串S的第"+id+"的位置。");
		}	
	}

下面链接为进阶版:
串的模式匹配(二)——KMP

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存