給定乙個字串 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 演算法 ...