ここに別の男の質問への回答があります文字列内の文字列の出現をカウントする方法は? だから私はここ でアルゴリズムをいじっていました.いくつかの関数をベンチマークした後、なぜ後方ループが前方ループよりもかなり遅いのか疑問に思っていました.
注:以下のこのコードは想定どおりに機能しません。他にも機能するものがあります(それはこの質問のポイントではありません)。コピー>貼り付けする前に注意してください
前方
function occurrences(string, substring) {
var n = 0;
var c = 0;
var l = substring.length;
for (var i = 0, len = string.length; i < len; i++) {
if (string.charAt(i) == substring.charAt(c)) {
c++;
} else {
c = 0;
}
if (c == l) {
c = 0;
n++;
}
}
return n;
}
後方へ
function occurrences(string, substring) {
var n = 0;
var l = substring.length - 1;
var c = l;
for (i = string.length; i > 1; i--) {
if (string.charAt(i) == substring.charAt(c)) {
c--;
} else {
c = l;
}
if (c < 0) {
c = l;
n++;
}
}
return n;
}