【LeetCode】005.Longest Palindromic Substring

来源:互联网 发布:手算工程量算法 编辑:程序博客网 时间:2024/06/17 20:22

程序应该没有问题,提交不能AC,主要的原因是超时。最好的时候,达到85个案例,还有几个案例未能测试。本地测试未通过案例,均可以。可能是我使用对象而非数组来作为动态规划的容器,导致开销过大。目前结合前面用Javascript刷LeetCode发现,在 javascript 中,乘除操作比较耗时,for循环能少则少。后面还会注意不同操作的耗时、性能情况。

先给出最化结构的版本,很短:

var longestPalindrome = function(s) {   var p = {0:{}};    var result = [0,0];    for(var i = 0; i<s.length; i++){        p[i] == undefined? p[i] = {}:p[i+1] ={};        p[i][i] = p[i+1][i] = true;    }    for(var i = 1; i<s.length; i++){        for(var j = 0; j < s.length  - i; j++){            p[j][j+i] = p[j+1][j+i-1] && (s[j] == s[j+i]);            if( p[j][j+i] && i > result[0]){result[0] = i,result[1] = j;}        }    }    return s.substr(result[1],result[0]+1);};

中间版本:

var longestPalindrome = function(s) {   var p = {0:{}};    var result = [0,0,0]    // 初始化    for(var i = 0; i<s.length; i++){        p[i] == undefined? p[i] = {}:p[i+1] ={};        // console.log(p[i],p[i+1])        p[i][i] = true;        p[i+1][i] = true;// 这一步很关键,只是用于初始化    }    for(var i = 1; i<s.length; i++){        for(var j = 0; j < s.length  - i; j++){            p[j][j+i] = p[j+1][j+i-1] && (s[j] == s[j+i]);            // console.log(j,j+i,p[j+1][j+i-1],s[j] == s[j+i])        }    }    for(var i in p){        for(var j in p[i]){            if(p[i][j]){                 j-i > result[0]?(result[0] = j-i,result[1] = i,result[2] = j):(null);             }            // console.log(i,j,p[i][j])        }    }    // console.log(result);    return s.substr(result[1],result[0]+1);};
// 优化版本var longestPalindrome = function(s) {   var p = {0:{}};    var result = [0,0];    // 初始化    for(var i = 0; i<s.length; i++){        p[i] == undefined? p[i] = {}:p[i+1] ={};        // console.log(p[i],p[i+1])        p[i][i] = true;        p[i+1][i] = true;// 这一步很关键,只是用于初始化    }    for(var i = 1; i<s.length; i++){        for(var j = 0; j < s.length - i; j++){            p[j][j+i] = p[j+1][j+i-1] && (s[j] == s[j+i]);            p[j][j+i] && i > result[0]?(result[0] = i,result[1] = j):(null);        }    }    return s.substr(result[1],result[0]+1);};
原创粉丝点击