`
xlaohe1
  • 浏览: 127186 次
  • 性别: Icon_minigender_1
  • 来自: 来处
社区版块
存档分类
最新评论

BF 字符串匹配

阅读更多

/**
 * 寻找字符串A中是否包含字符串B
 * BF算法思想:a字符串从来i遍历,b字符串从j遍历
 * a.(i + j) == b.j;则j ++;
 * 一直到出现 a.(i + j) != b.j;这时就的让j=0, i + 1 了;
 * 比如:a=ababcd;b=abc;
 * 首先找a.(i+j)=a,b.j=a;然后j + 1;
 * a.(i+j)=b,b.j=b;然后j + 1;
 * a.(i+j)=a,b.j=c;不相等,则j=0,i+1;
 * a.(i+j)=b,b.j=a;不相等,则j=0,i+1;
 * a.(i+j)=a,b.j=a;j+1;
 * ....
 * j=2了.即:b字符串循环完了,并且a.(i+j)=b.j;
 * 这时我们就找到了a字符串的字串b了,就可以退出所有循环.
 * 当i循环完了,还未找到a.(i+j)=b.j;这时就说明未找到字串b
 * @author xlaohe1
 *
 */
public class BF {
	
	public static void main(String[] args) {
		//bfAlgorithm("abcdabcdabcdxefasabcdeeffe", "abcde");
		bfAlgorithm2("abcdabcdabcdxefasabcdeeffe", "abcdeeffed");
	}
	static void bfAlgorithm2(String a, String b) {
		if(b.length() > a.length()) {
			System.out.println("not found");
			return;
		}
		int j, i;
		for(i = 0; i < a.length(); i ++) {
			String na = a.substring(i);
			//System.out.println(na);
			if(na.length() == b.length()) {// 如果剩下未判断a字符长度等于b字符长度,就直接进行equlas
				if(a.substring(i).equals(b)) {
					System.out.println("found: i = " + i);
					System.out.println(na);
					break;
				} else {
					System.out.println("not found");
					break;
				}
			}
			for(j = 0; j < b.length(); j ++) {
				if(a.charAt(i + j) != b.charAt(j)) break;// a字符串与b字符进行BF比较,如果不相等就结束循环
			}
			if(j == b.length()) {
				System.out.println("found: i = " + i);
				System.out.println(a.substring(i, b.length() + i));
				break;
			}
		}
	}
	public static void bfAlgorithm(String a, String b) {
		
		
		if(b.length() > a.length()) {
			System.out.println("not found");
			return;
		}
		int i = 0, j = 0;
		while(j < b.length() && i < a.length()) {
			if(a.charAt(i + j) != b.charAt(j)) {
				i ++;
				j = 0;
			} else 
				j ++;
		}
		if(i == a.length()) {
			System.out.println("not found");
		} else {
			System.out.println("a = " + a);
			System.out.println("b = " + b);
			System.out.println("i = " + i + " , j = " + j);
			System.out.println(a.substring(i, i + j));
			System.out.println(b.substring(0, j));
		}
	}

}


欢迎指正
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics