[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差別

留言

這個網誌中的熱門文章

a005: Eva 的回家作業