leetcode (5) Longest Palindromic Substring js代碼實現

Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

Subscribe to see which companies asked this question

這個題目是要求最長子迴文串

JavaScript代碼實現

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
	//1.處理字符串
	var l = s.length;
	var ret = "$";
	for(var i = 0; i < l; i++){
		ret += "#" + s.substr(i, 1); 
	}
	ret += "#";
	var n = ret.length;
	//2.找到每個str[i]對應的最長子迴文串,寫進數組p[i]
	//迴文子串邊界
	var mx = 0;
	//迴文子串中心位置
	var pi = 1;
	//數組,ret[i]的最長迴文子串半徑
	var p = new Array();
	for(var i = 0; i < n; i++){ 
		p[i] = 1;
	}
	for(var i = 1; i < n; i++){
		//j是i關於pi的對稱點
		var j = 2 * i -1;
		if(mx>i)
        {
            p[i]=Math.min(mx-i,p[2*pi-i]);
        }
        else
        {
            p[i]=1;
        }
		while((ret[i - p[i]] == ret[i +p[i]]) && (i - p[i] >= 0) && (i + p[i] < n)){
			p[i]++;
		}
		if(p[i] > mx - i)
        {
            mx = p[i] + i;
            pi = i;
        }
	}
	//返回最長迴文串
	var max = 0;
	var center = 0;
	for(var i = 1; i < n; i++){
		if(p[i] > max){
			max = p[i];
			center = i;
		}
	}
	ret = ret.substr(center - max + 1, 2 * max -1);
	ret = ret.split("#");
	ret = ret.join("");
	return ret;
};

注意substr方法的參數意義

發佈了34 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章