Longest Palindromic Substring
给出一个string,看看里面最长palindrome的substring是什么。
4种解法:
1)终极暴力:枚举起点,枚举终点,遍历起点到终点,时间复杂度n^3
2)次暴力:枚举中间位置,向左右延伸求最长,时间复杂度n^2
3)空间DP:dp[i][j] = dp[i+1][j-1] + 2 if..... 时间复杂度和空间复杂度均为 n^2
4) 对于最长回文子串问题有对应O(N)算法--Manacher算法 太难不考
以下解法为第二种
code
// Example program
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string helper(const string& str, int l, int r)
{
while(l >= 0 && r < (int)str.length() && str[l] == str[r])
{
l--;
r++;
}
return str.substr(l+1, r-l-1);
}
string longestsubpalindrome(const string& str)
{
string ret;
if(str.empty())
{
return ret;
}
ret = str.substr(0,1);
for(int i = 0; i<(int)str.length(); i++)
{
string str1 = helper(str, i, i);
string str2 = helper(str, i, i+1);
string cur = str1.length()>str2.length()?str1:str2;
if(cur.length() > ret.length())
{
ret = cur;
}
}
return ret;
}
int main()
{
string str = "a";
cout<<longestsubpalindrome(str)<<endl;
return 1;
}