結果
問題 | No.430 文字列検索 |
ユーザー | matsu7874 |
提出日時 | 2016-10-02 22:49:12 |
言語 | JavaScript (node v21.7.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,927 bytes |
コンパイル時間 | 189 ms |
コンパイル使用メモリ | 6,952 KB |
実行使用メモリ | 53,880 KB |
最終ジャッジ日時 | 2024-11-10 00:02:28 |
合計ジャッジ時間 | 3,484 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 57 ms
44,672 KB |
testcase_01 | TLE | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
ソースコード
var BoyerMoore = function (pattern) { this.pattern = pattern; this.skip = this.buildSkip(pattern); this.next = this.buildNext(pattern); return this; } BoyerMoore.prototype.buildSkip = function (pattern) { var m = pattern.length; var skip = {}; for (var i = 0; i < m; i++) { skip[pattern[i]] = m - i - 1; } return skip; } BoyerMoore.prototype.buildNext = function (pattern) { var m = pattern.length; var g = []; for (var i = 0; i < m; i++) { g.push(m); } var next = []; for (var i = 0; i < m; i++) { next.push(2 * m - i - 1); } var j = m; for (var i = m - 1; i >= 0; i-- , j--) { g[i] = j; while (j < m && pattern[j] !== pattern[i]) { next[j] = Math.min(next[j], m - i - 1); j = g[j]; } } for (var i = 0; i < m; i++) { next[i] = Math.min(next[i], j + m - i) if (i >= j) { j = g[j]; } } return next; } BoyerMoore.prototype.match = function (text, pattern, skip, next) { pattern = pattern || this.pattern; skip = skip||this.skip; next = next || this.next; var n = text.length; var m = pattern.length; var count = 0; for (var i = m - 1; i < n;) { var j = m - 1; while (j >= 0 && text[i] == pattern[j]) { i--; j--; } if (j < 0) { count++; i += m + 1; } else { i += Math.max(skip[text[i]] || 0, next[j]); } } return count; } function Main(input) { var data = input.split("\n") var text = data[0]; var m = Number(data[1]); var total = 0; var i; for (i=0; i<m; ++i){ var pattern = data[i+2]; var bm = new BoyerMoore(pattern); total += bm.match(text); } console.log(total); } Main(require("fs").readFileSync("/dev/stdin", "utf8"));