class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
string longest = "";
for (int i = 0; i<len; i++)
{
for (int j = 0; j<len-i; j++)
{
string strtemp = s.substr(i, j);
if (isPalindromic(strtemp) && (strtemp.size() >= longest.size()))
longest = strtemp;
}
}
return longest;
}
bool isPalindromic(string s)
{
int len = s.size();
if (len <= 1)
return false;
for (int i = 0; i<len/2; i++)
{
if (s[i] != s[len - 1-i])
return false;
}
return true;
}
};
上面是我自己写的,看到有个人写了好几种方法其中有一种也是用类似的方法,但是相比之下,人家写的要好多了,感觉效率要高,因为我用了好多的substr()这个函数,下面贴出原文暴力代码比较一下。在下面的 代码中取字符串的某一个字符时,用了at()函数,感觉要比[]这个符号要好吧,因为at会检查数组是不是越界了,而[]这个运算符貌似不会检查
string findLongestPalindrome(string &s)
{
int length=s.size();//字符串长度
int maxlength=0;//最长回文字符串长度
int start;//最长回文字符串起始地址
for(int i=0;i<length;i++)//起始地址
for(int j=i+1;j<length;j++)//结束地址
{
int tmp1,tmp2;
for(tmp1=i,tmp2=j;tmp1<tmp2;tmp1++,tmp2--)//判断是不是回文
{
if(s.at(tmp1)!=s.at(tmp2))
break;
}
if(tmp1>=tmp2&&j-i>maxlength)
{
maxlength=j-i+1;
start=i;
}
}
if(maxlength>0)
return s.substr(start,maxlength);//求子串
return NULL;
}
我和上面的代码主要区别在于判断一段字符是不是回文这一块,原文地址