LeetCode初试-最长回文子串

秋招的时候没有刷题,现在刷下试试。

第一版(排列所有字符,浪费内存):

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    const arr = [];
    const sArr = s.split('');
    sArr.reduce((p,c,i)=>{
        arr[i]=[]
        for(let idx=i+1;idx<=sArr.length;idx++){
            arr[i][idx] = sArr.slice(i,idx)
        }
    },[s[0]])
    const c = (str) => {
        for(let i=0;i<str.length/2;i++){
             if(str[i] === str[str.length -i-1]) 
             {
                 continue
             } else {
                 return false;
             }
        }
       return str;
    }
    let maxL = 0;
    let maxS = '';
    arr.forEach((v)=>{
        v.forEach((vv)=>{
            const r = c(vv);
            if(r.length>maxL){
                maxL=r.length;
                maxS = r.join('');
            }
        })
    })
    return maxS;
};

改良!

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {

    const cFU = (str,s,e) => {
        for(let i=0;i<(e-s)/2;i++){
             if(str[s+i] === str[e -i-1]) 
             {
                 continue
             } else {
                 return false;
             }
        }
       return true;
    }
    const sArr = s.split('');
    let maxL = 0;
    let maxS = [0,1];
    sArr.forEach((v,i)=>{
        for(let idx=i+1;idx<=sArr.length;idx++){
            const r = cFU(sArr,i,idx);
            if(r){
                if (idx - i > maxL) {
                    maxL = idx -i;
                       maxS=[i,idx];
                }
             
            }
            

        }
    })
    return s.slice.apply(s,maxS);
};

留下评论