博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] #5 Longest Palindromic Substring
阅读量:4481 次
发布时间:2019-06-08

本文共 1878 字,大约阅读时间需要 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.

本文利用动态规划的思想,如果s[i]==s[j],那么s[i+1]==s[j-1]时,才是子串。时间复杂度O(n2)。时间:226ms

代码如下:

string longestPalindrome(string s) {    int n = s.size();    int substrBegin = 0;    int maxlen = 1;    bool state[1000][1000] = { false };    for (int i = 0; i < n; i++){        state[i][i] = true;        if (i < n - 1 && s[i] == s[i + 1]){            state[i][i + 1] = true;            substrBegin = i;            maxlen = 2;        }    }    for (int i = 3; i <= n ; i++){        for (int j = 0; j < n - i + 1; j++){            if (s[j] == s[j + i - 1] && state[j + 1] [j+i-2]== true){                state[j][j+i - 1] = true;                substrBegin = j;                maxlen = i;            }        }    }    return s.substr(substrBegin, maxlen);}

 之后学习了新的想法。通过对string添加‘#’使得回文子串只存在一种有轴的回文子串序列,然后利用动态规划的思想求解。时间复杂度:O(n)。时间:12ms

代码如下:

class Solution {public:    string longestPalindrome(string s) {        string s1;        s1.resize(2 * s.size() + 2);        s1[0] = '$';        s1[1] = '#';        for (int i = 0; i < s.size(); ++i) {            s1[(i + 1) << 1] = s[i];            s1[((i + 1) << 1) + 1] = '#';        }        vector
p(s1.size(), 0); int res = 0, id = 0, first = 0; for (int i = 1; i < s1.size(); ++i) { if (p[id] + id > i) p[i] = min(p[2 * id - i], p[id] + id - i); else p[i] = 1; while (s1[i + p[i]] == s1[i - p[i]]) ++p[i]; if (i + p[i] > id + p[id]) id = i; res = max(res, p[i]); if (res == p[i]) first = (i - res) / 2; } return s.substr(first,res-1); }};

 

转载于:https://www.cnblogs.com/Scorpio989/p/4399328.html

你可能感兴趣的文章
大道至简第六章-从编程到工程
查看>>
单元测试——隔离神器:mockito
查看>>
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
定义DoubleArray并将其作为value写入SequenceFile
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
后缀自动机
查看>>
zkw线段树
查看>>
asp.net中导出Excel的方法
查看>>
[转]跟紧时代,让你的设计更加popular
查看>>
作业1226
查看>>