秋招的时候没有刷题,现在刷下试试。
第一版(排列所有字符,浪费内存):
/** * @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); };