中心擴散法,顧名思義就是以某乙個位置為中心,向周圍擴散,直到滿足條件或到達邊界。
題目描述:給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:輸入: "babad",輸出: "bab",注意: "aba" 也是乙個有效答案。
示例 2:輸入: "cbbd",輸出: "bb"
解題思路:遍歷s,以每個char以及兩個char中點為中心,計算以此點為中心的最長回文串;
例如: 字串abcba 共有5(字母) + 4(兩字母間) = 9個中心點;因此,長度為n的string共有2n-1個中心。我們的目標就是統計以這2n-1個點為中心的最長回文串s1,s2,..,s2n-1,並從中挑出全域性最長回文串。保留最大長度回文串index,記為left和right;完成遍歷後返回以left和right為邊界的substring
publicclass
solution
public
string longestpalindrome(string s)
char chararray =s.tochararray();
int length =chararray.length;
int left = 0, right = 0, longestlength = 0
; string longestpalindromestr = ""
;
for(int i=0; i//
以單個字元為中心擴散,則有n個中心(n是輸入字串的長度)
left =i;
right =i;
while(left >= 0 && right < length && chararray[left] ==chararray[right])
if(right - left - 1 >longestlength)
}for(int i=0; i1; i++)
if(right - left - 1 >longestlength)
}return
longestpalindromestr;
}}
資料結構與演算法 分治法
1 用分治法設計與實現歸併排序演算法。2 給定含有 n 個元素的多重集合 s,每個元素在 s 中出現的次數稱為該元素的重數。多重集合 s 中重數最大的元素稱為眾數。例如多重集合 s 其中眾數是 2,其重數為 3。用分治法設計並實現在多重集合中找眾數及其重數的演算法,要求演算法的時間複雜性在壞情況下不...
演算法與資料結構 篩選法求素數
簡單表示 isprime i 等於0表示i不是素數,否則等於1則表示i是素數。define max 5000005 long isprime max void initprime long i,j isprime 0 isprime 1 0 for i 2 i 附 求乙個數的質因子個數 比如6 2 ...
資料結構與演算法(5)減治法
減治法 reduceandconquermethod 在將原問題分解為若干個子問題後,利用了原問題的解與子問題的解之間的關係,這種關係通常表現為 1 原問題的解只存在於其中乙個較小規模的子問題中 2 原問題的解與其中乙個較小規模的解之間存在某種對應關係。由於原問題的解與較小規模的子問題的解之間存在這...