1. 程式人生 > 實用技巧 >[中級]字串運用-密碼擷取(HJ32)

[中級]字串運用-密碼擷取(HJ32)

一:解題思路

這道題目和 leetcode5 很類似,可以放在一起進行學習,這裡給出 Time:O(n^2),Space:O(n^2) 動態規劃版的解法。

二:完整程式碼示例 (C++版和Java版)

C++程式碼:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int longestPalindrome(string s) 
{
    if (s.size() == 0) return 0;
    
int start = 0; int maxLen = 0; int n = s.size(); vector<vector<bool>> d(n,vector<bool>(n,false)); for (int i = n - 1; i >= 0; i--) { for (int j = i; j < n; j++) { if (i == j) d[i][j] = true; else if (i + 1 == j) d[i][j] = s[i] == s[j];
else d[i][j] = s[i] == s[j] && d[i+1][j-1]; if (d[i][j] && (j - i + 1 > maxLen)) { start = i; maxLen = j - i + 1; } } } return maxLen; } int main() { string str = ""; while (cin >> str) { cout
<< longestPalindrome(str) << endl; } return 0; }