在乙個字串中找出最長回文子串

2021-08-28 18:47:58 字數 1114 閱讀 6810

如何高效的在乙個字串中找到最長的回文子串呢?下面我們根據**來分析

首先,回文串有兩種,一種是字串的長度是偶數,另一種就是奇數。我們從字串第二個字元開始,我們把當前起始字元叫做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 然後比較這兩個...