Leetcode 5. Longest Palindromic Substring (第十周作业)

来源:互联网 发布:unity3d安装步骤 编辑:程序博客网 时间:2024/06/06 07:45

这周依然是动态规划的题目。

先贴原题:

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.

Example:

Input: "cbbd"Output: "bb"

由题目可知:因为找的是成对称排列的字符子串。所以可以由中间向两边查找,例如bab,可以从a的两边查找,如果左右两边的元素值一样,那么两边的数向两边移动。但是由于可能会有一样的字符,所以第一步可以先把一样的连续字符拼成一个串,然后再从这个串往两边找。

贴出代码:

#include <iostream>#include <string>using namespace std;class Solution {public:string longestPalindrome(string s) {string lps = "";int maxL = 0;for (int i = 0; i < s.length(); i++) {int left = i, right = i;while (i + 1 < s.length() && s[i] == s[i + 1]) {right = i + 1;i++;}while (left >= 0 && right<s.length() && s[left] == s[right]) {left--; right++;}if (right - left - 1 > maxL) {lps = s.substr(left + 1, right - left - 1);maxL = right - left - 1;}}return lps;}};

可知时间复杂度为:O(n*n);

空间复杂度为O(1);