LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
来源:互联网 发布:centos测速 编辑:程序博客网 时间:2024/05/16 14:48
题目:
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,找出S中最长的回文子串。你可以假定S的最大长度为1000.并且存在一个唯一的最长回文子串。
思路:
1、暴力枚举
2、动态规划,复杂度 O( n ^2)。设状态 f(i,j) ,表示区间 [i,j] 是否为回文串,则状态转移方
程为
f( i, j) = true ; i == j;
s[i] == s[j] ;j = i + 1;
s[i] == s[j] && f(i+1 , j-1); j > i + 1;
其中i < j
动态规划代码:
class Solution {public: //动态规划法 //f( i, j) = true ; i == j;// s[i] == s[j] ;j = i + 1;// s[i] == s[j] && f(i+1 , j-1); j > i + 1 string longestPalindrome(string s) { bool f[1000][1000]={false}; string result; int start = 0;//记录最长回文子串的起始点 int maxLen = 1;//记录最长回文子串的长度 if(s.empty() || s.size() == 1) return s; int len = s.size();f[0][0] = true; //只计算矩阵f的上三角,每一次for循环计算上三角的一列 for(int j = 1 ; j < len ; j++) { f[j][j] = true;//对角线为true,只有一个元素,是回文 for(int i = 0 ; i < j ; i++) { if( j == i + 1 && s[i] == s[j])//计算靠近对角线的那个 f[i][j] = true; if(j > i + 1 )//由前一列和s[i]s[j]求当前列的元素,前一列的元素值已经由上个for循环计算出来 { f[i][j] = ( s[i] == s[j] && f[i + 1][j - 1]); } if(f[i][j] && j-i+1 > maxLen) { start = i; maxLen = j-i+1; } } } return s.substr(start,maxLen);//返回以start开头,长度为maxLen长度的子串 }};
3、从i向两边扩展
class Solution {public: string longestPalindrome(string s) { size_t len = s.size(); int start = 0 , maxLen = 1; for(int i = 0 ; i < len-1 ; i++) { if(len - i <= maxLen/2) break; int j = i , k = i+1; while(j >= 0 && k < len && s[j] == s[k]) { j--; k++; } if(k-j-1 > maxLen) { maxLen = k-j-1; start = j+1; } j = i , k = i; while(j >= 0 && k < len && s[j] == s[k]) { j--; k++; } if(k-j-1 > maxLen) { maxLen = k-j-1; start = j+1; } } return s.substr(start , maxLen); }};
0 0
- LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
- LeetCode OJ-5.Longest Palindromic Substring(最长回文子串)
- [LeetCode] Longest Palindromic Substring 最长回文子串
- LeetCode Longest Palindromic Substring(最长回文子串)
- [LeetCode]—Longest Palindromic Substring 最长回文子串
- LeetCode | Longest Palindromic Substring(最长回文子串)
- Longest Palindromic Substring [LeetCode] 最长回文子串
- [C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)
- LeetCode Longest Palindromic Substring 最长回文子串
- LeetCode-5 Longest Palindromic Substring(求最长回文子串)
- LeetCode:Longest Palindromic Substring 最长回文子串
- 最长回文子串(LeetCode #5 Longest Palindromic Substring)
- 【LeetCode】5.Longest Palindromic Substring 最长回文子串问题
- LeetCode 5. Longest Palindromic Substring(最长回文子串)
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
- leetcode--Longest Palindromic Substring--最长回文子串--
- LeetCode:Longest Palindromic Substring 最长回文子串
- [Leetcode #5]Longest Palindromic Substring 寻找最长回文子串
- 剑指offer系列源码-数字在排序数组中出现的次数
- can't open /dev/ttyAMA0: No such device or address
- 运行时类型识别
- js 实现 复选框全选与全不选
- ubuntu下安装vmware-tools 实现linux与windows的互相复制与粘贴
- LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
- Eclipse Luna Release (4.4.0)中如何用Maven创建web项目
- Android开发—Navigation Drawer(侧边栏菜单实现)
- 多线程操作UI
- springmvc用户注册,登陆的实现
- 国外程序员整理的机器学习资源大全
- 【OpenCV 学习笔记】1、OpenCV的下载与配置
- 策略路由PBR详解
- automake入门教程3