博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5. Longest Palindromic Substring -- 最长回文字串
阅读量:5082 次
发布时间:2019-06-13

本文共 2072 字,大约阅读时间需要 6 分钟。

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

(1)

class Solution {public:    string longestPalindrome(string s) {        if (s == "")            return "";        int l = s.length(), r[2100], maxID = 0, ID = 0, m = 0, i;        string ss;        ss.resize(l * 2 + 3);        ss[0] = '@';        ss[1] = '#';        for (i = 0; i < l; i++)        {            ss[i * 2 + 2] = s[i];            ss[i * 2 + 3] = '#';        }        ss[l * 2 + 2] = '\n';        l = l * 2 + 2;        for (i = 2; i < l; i++)        {            if (maxID > i)                r[i] = min(r[(ID << 1) - i], maxID - i);            else                r[i] = 1;            while (ss[i + r[i]] == ss[i - r[i]])                r[i]++;            if ((i + r[i] - 1) > maxID)            {                maxID = i + r[i] - 1;                ID = i;            }            if (r[i] > r[m])                m = i;        }        return s.substr((m-r[m])>>1, r[m]-1);    }};

 

(2)DP

string longestPalindrome_dp_opt_way(string s) {    int n = s.size();    if (n<=1) return s;    //Construct a matrix, and consdier matrix[j][i] as s[i] -> s[j] is Palindrome or not.    //                                 ------^^^^^^    //                                 NOTE: it's [j][i] not [i][j]    //Using vector  could cause the `Time Limit Error`    //So, use the native array    bool **matrix  = new bool* [n];    int start=0, len=0;    // Dynamic Programming    //   1) if i == j, then matrix[i][j] = true;    //   2) if i != j, then matrix[i][j] = (s[i]==s[j] && matrix[i-1][j+1])    for (int i=0; i
3, then, check s[i]==s[j] && matrix[i-1][j+1] if ( i==j || (s[j]==s[i] && (i-j<2 || matrix[i-1][j+1]) ) ) { matrix[i][j] = true; if (len < i-j+1){ start = j; len = i-j+1; } } } } for (int i=0; i

 

转载于:https://www.cnblogs.com/argenbarbie/p/5805757.html

你可能感兴趣的文章
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>