⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boyermoore.java

📁 三种字符串匹配:BF
💻 JAVA
字号:
package patternMatching;
import java.util.Hashtable;
public class BoyerMoore extends PatternMatcher {
	private static Hashtable<Character, Integer> lastOccurence;
	int l = 0;
	public BoyerMoore(String pattern) {
		super(pattern);
		comparetimes = 0;
		lastOccurence = new Hashtable<Character, Integer>();
		for (int i= getPattern().length()-1 ; i>=0 ; i--){
			if(!lastOccurence.containsKey(getPattern().charAt(i))){
				lastOccurence.put(getPattern().charAt(i), i);
			}
		}
		//System.out.println(lastOccurence.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 {
				if(lastOccurence.containsKey(text.charAt(i))){
					l = lastOccurence.get(text.charAt(i))+1;
				}
				else {
					l = 0;
				}
				i = i + getPattern().length() - Math.min(j, l );
				j = getPattern().length() - 1;
			}
			comparetimes++;
		}
		return -1;
	}
	public long getComparetimes() {
		return comparetimes;
	}
	// TODO test!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	public static void main(String[] args) {
		BoyerMoore pattern = new BoyerMoore("j??lsdjflskjdm");
		String text = "aaaaaaaaaaabbbcdabbksfj??lsdjflskjdm";
		System.out.println(pattern.match(text));
		System.out.println(pattern.comparetimes);
		//System.out.println(lastOccurence.size());
	}
}

⌨️ 快捷键说明

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