子串的定位 *** 作通常称为串的模式匹配,目的是求解子串(模式串)在主串中的位置。
第一次匹配:
*
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)