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

2021-10-08 23:53:59 字數 2683 閱讀 7283

1.最長回文子串行(可以不連續)

#include

#include

#include

#include

using namespace std;

//遞迴方法,求解最長回文子串行

intlps

(char

*str,

int i,

int j)

intmain()

#include

#include

#include

using namespace std;

//動態規劃求解最長回文子串行,時間複雜度為o(n^2)

intlpsdp

(char

*str,

int n)

}return dp[0]

[n -1]

;//返回字串str[0...n-1]的最長回文子串行長度

}int

main()

例:求回文子串行的個數::

#include

#include

using namespace std;

intnumofpalindromesubsequence

(string str)

}return dp[0]

[len-1]

;}intmain()

return0;

}

2.最長回文子串

暴力法:

public static string findlongestpalindrome

(string s)

// 若index1=index2,表示串是類似於abcba這種型別;若大於,則是abccba這種型別

if(index1 >= index2 && j - i > maxlength)}}

if(maxlength >0)

return s.

substring

(start, start + maxlength)

;return null;

}

動態規劃:

public static string findlongestpalindrome1

(string s)

}// 使用上述結果可以dp出子串長度為3~len -1的子串

for(

int strlen =

3; strlen < len; strlen ++)}

}if(maxlength >0)

return s.

substring

(start, start + maxlength)

;return null;

}

中心擴充套件法:

public static string findlongestpalindrome2

(string s)

j --

; k ++;}

}// 類似於abba這種情況,以i,i+1為中心向兩邊擴充套件

for(

int i =

0; i < len; i++

) j --

; k ++;}

}if(maxlength >0)

return s.

substring

(start, start + maxlength)

;return null;

}

manacher演算法:

public static string findlongestpalindrome3

(string s)

else

// 否則,需要根據i點一點一點的計算

res[i]

= r -i + k -1;

if(res[i]

+ i > r)

} maxc = res[maxc]

> res[i]

? maxc : i;

// maxc儲存的是回文半徑最大的那個點的位置

} string substr = str.

substring

(maxc - res[maxc]

, maxc + res[maxc]+1

);stringbuffer sb = new stringbuffer()

;for

(int i =

0; i < substr.

length()

; i++

)return sb.

tostring()

;}public static string dealwiths

(string s)

// 將原字串進行處理

return sb.

tostring()

;}

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

題目1 求最長回文子串 題目2 求回文子串數量 忽略兩個題目對於返回結果的不同要求 前者返回最長的結果,後者返回最長的結果對應的長度即可 dp陣列的定義的區別 最長回文子串 dp i j 表示的是string s中從i到j的子串 用python語法就是s i j 1 是否為回文子串。最長回文子串行 ...

最長回文子串 回文子串行 公共子串行

一 最長回文子串 連續 1.manacher演算法 見前面 2.動態規劃 bool p 100 100 for int i 0 i 2 reutrn s.substr start,maxlength 二 最長回文子串行 不連續 1.遞迴 2.動態規劃 3.將字串反轉,再求兩個字串的最長公共子串行lc...

最長回文子串行 回文子串行個數

主要內容 1 什麼是回文?2 字元子串和字元子串行的區別 3 最長回文子串行的思路和 4 回文子串行個數的思路和 回文指的是正讀和反讀都一樣的字串,如aba,abba等 字元字串指的是字串中連續的n個字元 如palindrome中,pa,alind,drome等都屬於它的字串 而字元子串行指的是字串...