这道题挺难的,暴力法固然爽,但是仍会超时,优化后也是,可能优化不够把;
从0 - length-1用中心扩展法能保证比暴力法O(n^3)低;
好像官网还给出三个方法,有时间可以细琢磨;
#include <iostream>
#include <string>
using namespace std;
//中心扩展法
string longestPalindrome(string s)
{
int len=s.length();
if(s.length()==1) return s;
string result="";
int max=0;
for(int i=0;i<len;i++)
{
int j;
string test="";
for(j=i-1;j>=0 && 2*i-j<len ;j--) //j=i-1 与 i+1比
{
if(s[j]!=s[2*i-j])
{
break;
}
}
test=s.substr(j+1,2*i-2*j-1);//注意C++的substr(a,size)指取的是以a为左端点的size个字符
if(test.length()>max)
{
max=test.length();
result=test;
}
for(j=i-1;j>=0 && 2*i-j-1<len ;j--)//j=i-1 与 i比
{
if(s[j]!=s[2*i-j-1])
{
break;
}
}
test=s.substr(j+1,2*i-2*j-2);
if(test.length()>max)
{
max=test.length();
result=test;
}
}
return result;
}
//暴力法
// bool isPalindrome(string s)
// {
// int len = s.length();
// for (int i = 0; i < len / 2; i++)
// {
// if (s[i] != s[len - i - 1])
// return false;
// }
// return true;
// }
// string longestPalindrome(string s) //a b c d e f g f e d
// { //abccb //aa
// int len = s.length();
// string result = "";
// int max = 0; //最长字串长度
// for (int i = 0; i < len; i++)
// {
// for (int j = i ; j < len; j++)
// {
// string test = s.substr(i, j -i+1);
// if (test.length() > max && isPalindrome(test))
// {
// max = test.length();
// result = test;
// }
// }
// }
// return result;
// }
int main()
{
cout<<longestPalindrome("a") << endl;
cout << longestPalindrome("cbbd") << endl;
cout << longestPalindrome("zudfweormatjycujjirzjpyrmaxurectxrtqedmmgergwdvjmjtstdhcihacqnothgttgqfywcpgnuvwglvfiuxteopoyizgehkwuvvkqxbnufkcbodlhdmbqyghkojrgokpwdhtdrwmvdegwycecrgjvuexlguayzcammupgeskrvpthrmwqaqsdcgycdupykppiyhwzwcplivjnnvwhqkkxildtyjltklcokcrgqnnwzzeuqioyahqpuskkpbxhvzvqyhlegmoviogzwuiqahiouhnecjwysmtarjjdjqdrkljawzasriouuiqkcwwqsxifbndjmyprdozhwaoibpqrthpcjphgsfbeqrqqoqiqqdicvybzxhklehzzapbvcyleljawowluqgxxwlrymzojshlwkmzwpixgfjljkmwdtjeabgyrpbqyyykmoaqdambpkyyvukalbrzoyoufjqeftniddsfqnilxlplselqatdgjziphvrbokofvuerpsvqmzakbyzxtxvyanvjpfyvyiivqusfrsufjanmfibgrkwtiuoykiavpbqeyfsuteuxxjiyxvlvgmehycdvxdorpepmsinvmyzeqeiikajopqedyopirmhymozernxzaueljjrhcsofwyddkpnvcvzixdjknikyhzmstvbducjcoyoeoaqruuewclzqqqxzpgykrkygxnmlsrjudoaejxkipkgmcoqtxhelvsizgdwdyjwuumazxfstoaxeqqxoqezakdqjwpkrbldpcbbxexquqrznavcrprnydufsidakvrpuzgfisdxreldbqfizngtrilnbqboxwmwienlkmmiuifrvytukcqcpeqdwwucymgvyrektsnfijdcdoawbcwkkjkqwzffnuqituihjaklvthulmcjrhqcyzvekzqlxgddjoir") << endl;
return 0;
}
如有建议,感谢指明!!!