2016-07-25 8 views
0

私はストリング(長さ50-2000)と潜在的なサブストリング(長さ2-8)を特定の位置( tケア)。私はたくさんの弦をテストする必要があるので、スピードがここで重要です。道そして速くあります:サブストリングが別のストリングの特定の位置にあるかどうかを確認する最速の方法

var q = baseString.indexOf(searchString, assumedIndex) === assumedIndex; 

または

var q = baseString.substr(assumedIndex, searchString.length) === searchString; 
+2

あなたは、パフォーマンスの問題を持っていますか? – Amit

+0

私は、検索文字列の長さをmとし、最初に 'O(n)'をつけていますが、nは基本文字列の長さを表します。そして、mはnより小さい。これは、indexOfの単純な実装を前提としています。また、これらの数字はそれほど大きくはないので、大きなO表記は本当に有効ではありません –

+0

@JosephYoung詳細はまだありません。あなたの推測*はまさにその推測です。他の推測よりはるかに優れていませんあなたは文字列の一致の97%のチャンスがあることが分かっていたら同じですか?) – Amit

答えて

0

はアミットはコメントで言っ念頭に置いて、私は、私も(おそらく)少なくともより速くなります代替を追加するかもしれないと思いましたsubstr方法:MDNから

var q = baseString.startsWith(searchString, assumedIndex); 

startsWith()メソッドは、文字列が別の文字列の 文字で始まるかどうかを判断し、trueまたはfalseを適切に返します。

小さな例:

> "Hello world!".startsWith("world!",6) 
< true 

そのブラウザの実装がネイティブに、おそらく実施される以外(下記参照)ポリフィルは、あなたがsubstrで実装するもの直接的であるので、私はそれが速いかもしれ主張の理由があります文字列をコピーすることなく。だから少なくともあなたがすでに提案したものと同じくらい速いはずです。

ポリフィル:

if (!String.prototype.startsWith) { 
    String.prototype.startsWith = function(searchString, position){ 
     position = position || 0; 
     return this.substr(position, searchString.length) === searchString; 
    }; 
} 
関連する問題