如何高效的在乙個字串中找到最長的回文子串呢?下面我們根據**來分析
首先,回文串有兩種,一種是字串的長度是偶數,另一種就是奇數。我們從字串第二個字元開始,我們把當前起始字元叫做i。
先檢驗奇數長度的字串,對比該字元的前乙個和後乙個(i - 1 和 i + 1),一共三個字元(奇數個),如果前後字元相同則說明是回文串,就把當前字元與儲存的回文palindromic進行比較,如果長度比較長,就把palindromic替換。然後接著首指標繼續往前移動一格,後指標後移一格。繼續判斷,直到不是回文,或者首和末兩者其中乙個超過字串合法長度。
奇數長度判斷完了,接著到偶數。偶數起始位置就是當前字元i和前乙個字元(i - 1)。先判斷這兩個字元是否相等,如果相等,接著前後各移動一格,條件和奇數一樣。
當以上兩個都判斷完了之後,i++。
public string longestpalindrome
(string s)
// 記錄最長的回文串
string palindromic ="";
int j, k;
for(
int i =
1; i < s.
length()
; i++
)int sum =1;
// 奇數長度判斷
for(j = i -
1, k = i +
1; j >=
0&& k < s.
length()
; j--
, k++
) sum = sum +2;
}if(sum > palindromic.
length()
) sum =0;
// 偶數長度判斷
for(j = i -
1, k = i; j >=
0&& k < s.
length()
; j--
, k++
) sum = sum +2;
}if(sum > palindromic.
length()
)}return palindromic;
}
在乙個字串中查詢最長回文子串
先講一下自己的思想 1.設定三個指標ppre,pre,post,依次指向字串第乙個,第二個,第三個。判斷第乙個和第二個 回文子串長度為偶數時 判斷第乙個和第三個 回文子串長度為奇數時 設定乙個num size 陣列記錄回文子串的長度,乙個ptr size 指標陣列記錄回文子串的第乙個子串。2.首先將...
給定乙個字串,找出該字串的最長回文子串
給定乙個字串,找出該字串的最長回文子串。回文字串指的就是從左右兩邊看都一樣的字串,如aba,cddc都是回文字串。字串abbacdc存在的回文子串有abba和cdc,因此它的最長回文子串為abba。public class longpalindromic private static string ...
找出乙個字串中最長的連續回文
找出乙個字串中最長的連續回文 題目 找出乙個字串中最長的回文,比如goooogleel,最長回文是goooog 分析 第一,定義乙個pstr指向字串str,再定義乙個p指向pstr,q指向pstr 1 第二,找出乙個字元 p與其下乙個字元 q相同位置,比如oo,num index p 然後比較這兩個...