bm.java

来自「三种字符串匹配:BF」· Java 代码 · 共 51 行

JAVA
51
字号
package patternMatching;
public class BM extends PatternMatcher {

	static int [] patternArray ;
	int l = 0;
	public BM(String pattern) {
		super(pattern);
		patternArray = new int [256];
			for (int i=0; i<patternArray.length;i++){
				patternArray[i] = -1;
			}
			char[] tmp = pattern.toCharArray();
			for ( int j =tmp.length-1; j>=0 ;j--){
				if (patternArray[tmp[j]] == -1){
					patternArray[tmp[j]] = j;
				}
			}
		//System.out.println(patternArray.toString());
	}
	public int match(String text){
		int i = getPattern().length()-1;
		int j = i;
		while( i < text.length()){
			if (text.charAt(i)== getPattern().charAt(j)){
				if (j==0){
					return i;
				}
				else {
					i--;
					j--;
				}
			}
			else {
				l = patternArray[text.charAt(i)]+1;
				i = i + getPattern().length() - Math.min(j, l );
				j = getPattern().length() - 1;
			}
		}
		return -1;
	}

	// TODO test!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	public static void main(String[] args) {
		BM pattern = new BM("jflskjdmqwpeoriuqjsdfkmz.,mbnhlkxcjzvhisuafypwqoipr");
	String text = "a!@#$%^&&**(())_)(!~!~`@#%&\"\\::><?;,.';[[][pajflskjdmqwpeoriuqjsdfkmz.,mbnhlkxcjzvhisuafypwqoipraaajlsdjflskjdm";
		System.out.println(pattern.match(text));
		//System.out.println(patternArray.toString());

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?