回文问题,一开始搞了个递归算法,重复计算太多,结果超时了。
目前改成先把原来的字符串反转,然后查找两个字符串最大公共字串的问题,勉强通过吧,代码也有重复,有点懒了...
class Solution {
public:
string longestPalindrome(string s) {
int length = s.size();
char *s1 = new char[length];
char *s2 = new char[length];
for (int i = 0; i < length; ++i) {
s1[i] = s[i];
s2[length - 1 - i] = s[i];
}
string sr(s2, length);
int maxi = 0;
int start = 0;
int num = 0;
bool mark = false;
string result = "";
for (int j = 1; j <= length; ++j) {
for (int m = 0; m < j; ++m) {
if (s1[m] == s2[length - j + m]) {
if (mark == false) {
mark = true;
start = m;
}
num++;
}
else {
if (mark == true) {
mark = false;
if (num > maxi) {
maxi = num;
result = s.substr(start, num);
}
}
num = 0;
}
}
if (num > maxi) {
maxi = num;
result = s.substr(start, num);
}
num = 0;
mark = false;
}
num = 0;
mark = false;
for (int j = 1; j <= length; ++j) {
for (int m = 0; m < j; ++m) {
if (s2[m] == s1[length - j + m]) {
if (mark == false) {
mark = true;
start = m;
}
num++;
}
else {
if (mark == true) {
mark = false;
if (num > maxi) {
maxi = num;
result = sr.substr(start, num);
}
}
num = 0;
}
}
if (num > maxi) {
maxi = num;
result = sr.substr(start, num);
}
num = 0;
mark = false;
}
return result;
}
};