前端面试系列一

列表
一:js获取字符串最长回文串
二:判断字符串是否是回文

一:js获取字符串最长回文串

// 方法一:暴力破解法,思路就是每个都拿出来,根据长度排个序
function comparm(a,b){
    return b.length-a.length
}
function testReverse(str){
    return str === str.split('').reverse().join('')
}
function longestPalindrome(s){
    if(s.length < 2){return s}
    var i,j ,list =[];
    for(i = 0;i<s.length;i++){
        for(j=i+1;j<s.length;j++){
            const news = s.slice(i,j)
            if(testReverse(news)){
                list.push(news)
            }
        }
    }
    const newsss = list.sort(comparm)
    return newsss[0]
}
const aa = longestPalindrome('hjkljgghlkjklhsyh')
console.log(aa) //hlkjklh

// 方法二:leetcode上有个中心扩展法,就是中心超两侧判断是否一样,
// 判断到不一样为止,存符合条件的起止位置,可判断出最大的长度

var longestPalindrome = function(s) {
    var start = 0,end=0;
    for(var i=0;i<s.length;i++){
        const l1 = search(s,i,i)
        const l2 = search(s,i,i+1)
        const max = Math.max(l1,l2)
        if(max>end-start){
            start = i-Math.floor((max-1)/2)
            end = i+(Math.floor(max))/2
        }
    }
    return s.slice(start,end+1)
    //需要返回长度
    function search(s,l,r){
        let left = l;
        let right = r;
        while(left >= 0 && right < s.length && s[left] === s[right]){
            left--
            right++
        }
        return right-left-1
    }
};

const aa = longestPalindrome('sisjhksskhjij')
console.log('--aa',aa) //jhksskhj

二:判断字符串是否是回文

// 方法一:转成数组翻转下
function testReverse(str){
    return str === str.split('').reverse().join('')
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容