Longest Palindromic Substring

来源:互联网 发布:手把手教你单片机 pdf 编辑:程序博客网 时间:2024/04/25 16:06
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)动态规划。

这里动态规划的思路是 dp[i][j] 表示的是 从i 到 j 的字串,是否是回文串。

则根据回文的规则我们可以知道:

如果s[i] == s[j] 那么是否是回文决定于 dp[i+1][ j - 1]

当 s[i] != s[j] 的时候, dp[i][j] 直接就是 false。

动态规划的进行是按照字符串的长度从1 到 n推进的。

2)中心扩展法

 因为回文字符串是以中心轴对称的,所以如果我们从下标 i 出发,用2个指针向 i 的两边扩展判断是否相等,那么只需要对0到

n-1的下标都做此操作,就可以求出最长的回文子串。但需要注意的是,回文字符串有奇偶对称之分,即"abcba"与"abba"2种类型,

因此需要在代码编写时都做判断。

#include <iostream>using namespace std;string getExpandAroundCenter(string s,int pre,int post){string res;int len;while(pre >= 0 && post <= s.size()-1 && s[pre] == s[post]){pre --;post ++;}len = post - pre + 1; res = s.substr(pre,len);return res;}string longestPalindromicSub(string s){if(s.size() == 0 || s.size() == 1)return s;int longest=0;string str1,str2,res;for(int i=0;i<s.size()-1;i++){//abcbastr1 = getExpandAroundCenter(s,i,i);//abbastr2 = getExpandAroundCenter(s,i,i+1);if(str1.size()>str2.size()){if(str1.size() > longest){longest = str1.size();res = str1;}}else{if(str2.size() > longest){longest = str2.size();res = str2;}}}return res;}void main(){string s ="qabcbafffd";string res = longestPalindromicSub(s);printf("The longest palindromic substring is %s.\n",res.c_str());}



0 0
原创粉丝点击