[leetcode] [30] [javascript] substr performance better than substring
/**
* @param {string} s
* @param {string[]} words
* @return {number[]}
*/
var findSubstring = function(s, words) {
var counts = {};
//counts 記錄所有可用的pattern剩餘使用次數
for (var p in words){
counts[words[p]] = counts[words[p]] === undefined ? 1 : counts[words[p]] + 1;
}
var n = s.length, num = words.length, len = words[0].length;
var indexes = [];
//從頭開始比對 是否有可用pattern可以使用
//例如 s = abdegdsadf, counts= {'abd': 2, 'acc': 1}
//發現abd is match, 接下來就會檢察egd有沒有再counts裡面
//發現沒有就進入下一round, s = bdegdsadf, 開始檢察bde有沒有在count裡面
//每一round檢查完會看可用pattern是不是都用完了, 用完了代表成功match
for (var i = 0; i < n - num * len + 1; i++) {
var seen = {};
for (var j=0; j < num; j++) {
var word = s.substr(i + j * len, len);
if (counts[word] !== undefined) {
seen[word] = seen[word] === undefined ? 1 : seen[word] + 1;
if (seen[word] > counts[word]){
break;
}
}
else{
break;
}
}
if (j == num) indexes.push(i);
}
return indexes;
};
搞半天一直TLE , 原來是語法performance差別
留言
張貼留言