[中级]字符串运用-密码截取(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; }