Longest Palindromic String
阿新 • • 發佈:2018-12-27
來源:Leetcode Problem Set - Algorithm Problem5
題目描述:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
解題思路:使用動態規劃的思想,建立一個n^2規模的布林陣列dp,dp[i][j]表示從i到j的連通性,在題中是從i到j的字串是否是迴文串,根據迴文的定義,若s[i]
!= s[j]則dp[i][j]一定為假,否則dp[i][j]的真假取決於dp[i+1][j-1]
程式碼解答:
class Solution { public: string longestPalindrome(string s) { int size = 1000; bool dp[size][size]; if (s.length() == 0) { return ""; } if (s.length() == 1) { return s; } int i,j; for (i = 0; i < s.length(); i++) { for (j = 0; j < s.length(); j++) { if (i >= j) dp[i][j] = true; // i=j代表只有一個字元的串,可以設定為迴文,當i>j是空串,可設定為迴文,其他情況都設定為不是迴文 else dp[i][j] = false; } } int k; int maxLen = 1; int rf = 0, rt = 0; for (k = 1; k < s.length(); k++) { for (i = 0; k+i < s.length(); i++) { j = i + k; if (s[i] != s[j]) dp[i][j] = false; else { dp[i][j] = dp[i+1][j-1]; if (dp[i][j]) { if (k+1 > maxLen) { maxLen = k + 1; rf = i; rt = j; } } } } } return s.substr(rf, rt - rf + 1); } };