JAVA實現查詢最長回文子串

2021-09-25 02:40:09 字數 1720 閱讀 7231

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

方法一:採用滑動視窗,較為簡單,但用時長。

public string longestpalindrome(string s) 

string longest = string.valueof(s.charat(0));

for(int i = 0; i < s.length(); i++)

if(ispalindrome(s.substring(i, j)))}}

}return longest;

}/**

* 判斷是否為回文數

* @param s

* @return

*/public boolean ispalindrome(string s)

}return true;

}

方法二:中心拓展演算法:將字串分為2n - 1個中心,分別算出以這個中心為基礎的最大回文字串。

分析:此演算法理解不難,實現容易,並且時間複雜度低為n。

注:中心點不為n個的原因為包含中心點在偶數回文數情況,如:bb中心點則在bb中間。

public static string longestpalindrome(string s) 

int maxlength = 0; //最大回文數長度

int center = 0; //中心點

for(int i = 0; i < s.length(); i++)

}return s.substring(center - (maxlength - 1) / 2, center + maxlength / 2 + 1);

}/**

* 給定乙個中心點,並向兩邊拓展到以該點為中心的最大的回文數的長度

* @param s

* @param left

* @param right

* @return

*/public static int centerexpand(string s, int left, int right)

return right - left - 1;

}

方法三:動態規劃法

分析:此演算法記憶體消耗大,但時間複雜度較低,理解關鍵為怎樣在二維陣列中判斷字串是否為回文,即外面的是回文的,並且裡面的是回文的即可。

如:判斷ababa時,首先判斷a是回文,再對b - b進行判斷是否相等,最後對a - - - a是否相等,他們兩個的先決條件是裡面的字串為回文。在二維陣列表示為乙個v字行的true方陣。

public static string longestpalindrome(string s) 

boolean dp = new boolean[s.length()][s.length()]; // 初始化乙個二維陣列,值預設是false

string result = s.substring(0,1);

for (int j = 0; j < s.length(); j++)}}

}return result;

}

查詢最長回文子串 python

回文串正著讀和反著讀都一樣的字串,如xyx和xyyx 問題給定乙個字串s,找s中的最長回文子串 如s asdfxxyxxhjkl 其最長回文子串是 xxyxx 從中間開始向兩邊擴散 舉個栗子 如 s abcxyxsed 可以看到存在的最長回文子串是 xyx 遍歷字串s i 0,s i a 向兩邊擴,...

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

LeetCode C 實現最長回文子串

在leetcode上做的題,剛開始因為對題目的一點小誤解,所以花了不少時間,最終以16ms的成績通過了。給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 演算法 ...