根據阮一峰的部落格
試寫演算法。
使用好字尾的方法比較複雜,暫未實現。
只實現了通過壞字元的方法,事實上boyer-moore-horspool演算法是簡化版的boyer-moore演算法,它只使用壞字元規則。
具體**如下:
classprogram
static
intboyermoore(
char
source,
char
pattern)
else
else
start_pointer += offset;
end_pointer = start_pointer + pattern_length - 1;
offset_for_print += offset;
} }
return
0;
} static
bool
checkisequal_badchar(
char
pattern,
char
chars,
outchar
badchar,
outint
badpostion)
for(int
i = pattern.length - 1; i >= 0; i--)
} badchar =
'\0'
; badpostion = -1;
return
true
; }
///
/// 根據起始位置和結束位置,給出子串
///
///
///
///
///
static
char
subchars(
char
source,
intstart,
intend)
return
c;
} ///
/// 生成壞字元位置表
///
///
///
static
dictionary<
char
, int
> getpostiondictionary(
char
chars)
else
//存在則覆蓋
} return
d;
} }
測試資料輸出圖:
Boyer Moore 演算法總結
最近在寫乙個搜尋字串的用例,剛好使用到這個演算法,在網路上學習了多篇文章,在這裡記錄一下自己的理解。首先理清楚演算法的原理 1.演算法是從尾部開始比較字串的,如果最後乙個字元不匹配,且不匹配的字元不在模式串中,那麼可以直接忽略這段比較內容,這種情況下效率最高。如下所示 abbdd ccggxabbd...
Boyer Moore 投票演算法
刷題過程中遇到的乙個非常巧妙的演算法。是出現在 求陣列 現超過一半的數字 這道題中。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。例項1輸入 1,2,3,2,2,2,5,4,2 輸出 2 1 陣列長度 50000 思路 如果把陣...
Boyer Moore 投票演算法
有以下問題 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數 大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。比較容易想到的解法是用雜湊表對每個數出現的次數進行儲存,然後就可以找出次數最多的那個數了。這樣做的時間和空間複雜度都是 o n o n...